做公益的网站,龙岩天宫山缆车门票多少钱,企业网站手机版,搜索网页怎么制作大数据技术之Oozie
第1章 Oozie简介
Oozie英文翻译为#xff1a;驯象人。一个基于工作流引擎的开源框架#xff0c;由Cloudera公司贡献给Apache#xff0c;提供对Hadoop MapReduce、Pig Jobs的任务调度与协调。Oozie需要部署到Java Servlet容器中运行。主要用于定时调度任…大数据技术之Oozie
第1章 Oozie简介
Oozie英文翻译为驯象人。一个基于工作流引擎的开源框架由Cloudera公司贡献给Apache提供对Hadoop MapReduce、Pig Jobs的任务调度与协调。Oozie需要部署到Java Servlet容器中运行。主要用于定时调度任务多任务可以按照执行的逻辑顺序调度。
第2章 Oozie的功能模块介绍
2.1 模块
Workflow 顺序执行流程节点支持fork分支多个节点join合并多个节点为一个Coordinator 定时触发workflowBundle Job 绑定多个Coordinator 2.2 常用节点控制流节点Control Flow Nodes 控制流节点一般都是定义在工作流开始或者结束的位置比如start,end,kill等。以及提供工作流的执行路径机制如decisionforkjoin等。动作节点Action Nodes 负责执行具体动作的节点比如拷贝文件执行某个Shell脚本等等。 第3章 Oozie的部署 3.1 部署HadoopCDH版本的 3.1.2 修改Hadoop配置 core-site.xml
!-- Oozie Server的Hostname --
propertynamehadoop.proxyuser.atguigu.hosts/namevalue*/value
/property!-- 允许被Oozie代理的用户组 --
propertynamehadoop.proxyuser.atguigu.groups/namevalue*/value
/property
mapred-site.xml
!-- 配置 MapReduce JobHistory Server 地址 默认端口10020 --
propertynamemapreduce.jobhistory.address/namevaluehadoop102:10020/value
/property!-- 配置 MapReduce JobHistory Server web ui 地址 默认端口19888 --
propertynamemapreduce.jobhistory.webapp.address/namevaluehadoop102:19888/value
/property
yarn-site.xml
!-- 任务历史服务 --
property nameyarn.log.server.url/name valuehttp://hadoop102:19888/jobhistory/logs//value
/property完成后记得scp同步到其他机器节点 3.1.3 重启Hadoop集群
[atguiguhadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh
[atguiguhadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh
[atguiguhadoop102 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh start historyserver注意需要开启JobHistoryServer, 最好执行一个MR任务进行测试。 3.2 部署Oozie 3.2.1 解压Oozie
[atguiguhadoop102 software]$ tar -zxvf /opt/software/cdh/oozie-4.0.0-cdh5.3.6.tar.gz -C ./3.2.2 在oozie根目录下解压oozie-hadooplibs-4.0.0-cdh5.3.6.tar.gz
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ tar -zxvf oozie-hadooplibs-4.0.0-cdh5.3.6.tar.gz -C ../完成后Oozie目录下会出现hadooplibs目录。 3.2.3 在Oozie目录下创建libext目录
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ mkdir libext/3.2.4 拷贝依赖的Jar包 1将hadooplibs里面的jar包拷贝到libext目录下
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ cp -ra hadooplibs/hadooplib-2.5.0-cdh5.3.6.oozie-4.0.0-cdh5.3.6/* libext/2拷贝Mysql驱动包到libext目录下
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ cp -a /opt/software/mysql-connector-java-5.1.27/mysql-connector-java-5.1.27-bin.jar ./libext/3.2.5 将ext-2.2.zip拷贝到libext/目录下 ext是一个js框架用于展示oozie前端页面
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ cp -a /opt/software/cdh/ext-2.2.zip libext/3.2.6 修改Oozie配置文件 oozie-site.xml 属性oozie.service.JPAService.jdbc.driver 属性值com.mysql.jdbc.Driver 解释JDBC的驱动
属性oozie.service.JPAService.jdbc.url 属性值jdbc:mysql://hadoop102:3306/oozie 解释oozie所需的数据库地址
属性oozie.service.JPAService.jdbc.username 属性值root 解释数据库用户名
属性oozie.service.JPAService.jdbc.password 属性值000000 解释数据库密码
属性oozie.service.HadoopAccessorService.hadoop.configurations 属性值*/opt/module/cdh/hadoop-2.5.0-cdh5.3.6/etc/hadoop 解释让Oozie引用Hadoop的配置文件 3.2.7 在Mysql中创建Oozie的数据库 进入Mysql并创建oozie数据库
$ mysql -uroot -p000000
mysql create database oozie;3.2.8 初始化Oozie
上传Oozie目录下的yarn.tar.gz文件到HDFS 提示yarn.tar.gz文件会自行解压
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ bin/oozie-setup.sh sharelib create -fs hdfs://hadoop102:8020 -locallib oozie-sharelib-4.0.0-cdh5.3.6-yarn.tar.gz执行成功之后去50070检查对应目录有没有文件生成。 2) 创建oozie.sql文件
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ bin/ooziedb.sh create -sqlfile oozie.sql -run打包项目生成war包
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ bin/oozie-setup.sh prepare-war3.2.9 Oozie的启动与关闭 启动命令如下
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ bin/oozied.sh start关闭命令如下
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ bin/oozied.sh stop3.2.10 访问Oozie的Web页面
http://hadoop102:11000/oozie第4章 Oozie的使用 4.1 案例一Oozie调度shell脚本 目标使用Oozie调度Shell脚本 分步实现 1解压官方案例模板
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ tar -zxvf oozie-examples.tar.gz2创建工作目录
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ mkdir oozie-apps/3拷贝任务模板到oozie-apps/目录
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ cp -r examples/apps/shell/ oozie-apps4编写脚本p1.sh
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ vi oozie-apps/shell/p1.sh内容如下
#!/bin/bash
/sbin/ifconfig /opt/module/p1.log5修改job.properties和workflow.xml文件
job.properties
#HDFS地址
nameNodehdfs://hadoop102:8020
#ResourceManager地址
jobTrackerhadoop103:8032
#队列名称
queueNamedefault
examplesRootoozie-apps
oozie.wf.application.path${nameNode}/user/${user.name}/${examplesRoot}/shell
EXECp1.sh
workflow.xml
workflow-app xmlnsuri:oozie:workflow:0.4 nameshell-wf
start toshell-node/
action nameshell-nodeshell xmlnsuri:oozie:shell-action:0.2job-tracker${jobTracker}/job-trackername-node${nameNode}/name-nodeconfigurationpropertynamemapred.job.queue.name/namevalue${queueName}/value/property/configurationexec${EXEC}/exec!-- argumentmy_outputHello Oozie/argument --file/user/atguigu/oozie-apps/shell/${EXEC}#${EXEC}/filecapture-output//shellok toend/error tofail/
/action
decision namecheck-outputswitchcase toend${wf:actionData(shell-node)[my_output] eq Hello Oozie}/casedefault tofail-output//switch
/decision
kill namefailmessageShell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]/message
/kill
kill namefail-outputmessageIncorrect output, expected [Hello Oozie] but was [${wf:actionData(shell-node)[my_output]}]/message
/kill
end nameend/
/workflow-app6上传任务配置
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ /opt/module/cdh/hadoop-2.5.0-cdh5.3.6/bin/hadoop fs -put oozie-apps/ /user/atguigu7执行任务
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ bin/oozie job -oozie http://hadoop102:11000/oozie -config oozie-apps/shell/job.properties -run8杀死某个任务
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ bin/oozie job -oozie http://hadoop102:11000/oozie -kill 0000004-170425105153692-oozie-z-W4.2 案例二Oozie逻辑调度执行多个Job 目标使用Oozie执行多个Job调度 分步执行 1解压官方案例模板
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ tar -zxf oozie-examples.tar.gz2编写脚本
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ vi oozie-apps/shell/p2.sh内容如下
#!/bin/bash
/bin/date /opt/module/p2.log3修改job.properties和workflow.xml文件
job.properties
nameNodehdfs://hadoop102:8020
jobTrackerhadoop103:8032
queueNamedefault
examplesRootoozie-appsoozie.wf.application.path${nameNode}/user/${user.name}/${examplesRoot}/shell
EXEC1p1.sh
EXEC2p2.sh
workflow.xml
workflow-app xmlnsuri:oozie:workflow:0.4 nameshell-wfstart top1-shell-node/action namep1-shell-nodeshell xmlnsuri:oozie:shell-action:0.2job-tracker${jobTracker}/job-trackername-node${nameNode}/name-nodeconfigurationpropertynamemapred.job.queue.name/namevalue${queueName}/value/property/configurationexec${EXEC1}/execfile/user/atguigu/oozie-apps/shell/${EXEC1}#${EXEC1}/file!-- argumentmy_outputHello Oozie/argument--capture-output//shellok top2-shell-node/error tofail//actionaction namep2-shell-nodeshell xmlnsuri:oozie:shell-action:0.2job-tracker${jobTracker}/job-trackername-node${nameNode}/name-nodeconfigurationpropertynamemapred.job.queue.name/namevalue${queueName}/value/property/configurationexec${EXEC2}/execfile/user/admin/oozie-apps/shell/${EXEC2}#${EXEC2}/file!-- argumentmy_outputHello Oozie/argument--capture-output//shellok toend/error tofail//actiondecision namecheck-outputswitchcase toend${wf:actionData(shell-node)[my_output] eq Hello Oozie}/casedefault tofail-output//switch/decisionkill namefailmessageShell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]/message/killkill namefail-outputmessageIncorrect output, expected [Hello Oozie] but was [${wf:actionData(shell-node)[my_output]}]/message/killend nameend/
/workflow-app3上传任务配置
$ bin/hadoop fs -rmr /user/atguigu/oozie-apps/
$ bin/hadoop fs -put oozie-apps/map-reduce /user/atguigu/oozie-apps4执行任务 [atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ bin/oozie job -oozie http://hadoop102:11000/oozie -config oozie-apps/shell/job.properties -run 4.3 案例三Oozie调度MapReduce任务 目标使用Oozie调度MapReduce任务 分步执行 1找到一个可以运行的mapreduce任务的jar包可以用官方的也可以是自己写的 2拷贝官方模板到oozie-apps
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ cp -r /opt/module/cdh/ oozie-4.0.0-cdh5.3.6/examples/apps/map-reduce/ oozie-apps/1)测试一下wordcount在yarn中的运行
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ /opt/module/cdh/hadoop-2.5.0-cdh5.3.6/bin/yarn jar /opt/module/cdh/hadoop-2.5.0-cdh5.3.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar wordcount /input/ /output/配置map-reduce任务的job.properties以及workflow.xml
job.properties
nameNodehdfs://hadoop102:8020
jobTrackerhadoop103:8032
queueNamedefault
examplesRootoozie-apps
#hdfs://hadoop102:8020/user/admin/oozie-apps/map-reduce/workflow.xml
oozie.wf.application.path${nameNode}/user/${user.name}/${examplesRoot}/map-reduce/workflow.xml
outputDirmap-reduce
workflow.xml
workflow-app xmlnsuri:oozie:workflow:0.2 namemap-reduce-wfstart tomr-node/action namemr-nodemap-reducejob-tracker${jobTracker}/job-trackername-node${nameNode}/name-nodepreparedelete path${nameNode}/output///prepareconfigurationpropertynamemapred.job.queue.name/namevalue${queueName}/value/property!-- 配置调度MR任务时使用新的API --propertynamemapred.mapper.new-api/namevaluetrue/value/propertypropertynamemapred.reducer.new-api/namevaluetrue/value/property!-- 指定Job Key输出类型 --propertynamemapreduce.job.output.key.class/namevalueorg.apache.hadoop.io.Text/value/property!-- 指定Job Value输出类型 --propertynamemapreduce.job.output.value.class/namevalueorg.apache.hadoop.io.IntWritable/value/property!-- 指定输入路径 --propertynamemapred.input.dir/namevalue/input//value/property!-- 指定输出路径 --propertynamemapred.output.dir/namevalue/output//value/property!-- 指定Map类 --propertynamemapreduce.job.map.class/namevalueorg.apache.hadoop.examples.WordCount$TokenizerMapper/value/property!-- 指定Reduce类 --propertynamemapreduce.job.reduce.class/namevalueorg.apache.hadoop.examples.WordCount$IntSumReducer/value/propertypropertynamemapred.map.tasks/namevalue1/value/property/configuration/map-reduceok toend/error tofail//actionkill namefailmessageMap/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]/message/killend nameend/
/workflow-app5拷贝待执行的jar包到map-reduce的lib目录下
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ cp -a /opt /module/cdh/hadoop-2.5.0-cdh5.3.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar oozie-apps/map-reduce/lib6上传配置好的app文件夹到HDFS
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ /opt/module/cdh/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -put oozie-apps/map-reduce/ /user/admin/oozie-apps7执行任务
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ bin/oozie job -oozie http://hadoop102:11000/oozie -config oozie-apps/map-reduce/job.properties -run4.4 案例四Oozie定时任务/循环任务 目标Coordinator周期性调度任务 分步实现 1配置Linux时区以及时间服务器 2检查系统当前时区
date -R
注意如果显示的时区不是0800删除localtime文件夹后再关联一个正确时区的链接过去命令如下
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime同步时间
ntpdate pool.ntp.org修改NTP配置文件
vi /etc/ntp.conf去掉下面这行前面的# ,并把网段修改成自己的网段 restrict 192.168.122.0 mask 255.255.255.0 nomodify notrap 注释掉以下几行
#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org把下面两行前面的#号去掉,如果没有这两行内容,需要手动添加
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10重启NTP服务 systemctl start ntpd.service注意如果是centOS7以下的版本使用命令service ntpd start
systemctl enable ntpd.service注意如果是centOS7以下的版本使用命令chkconfig ntpd on 集群其他节点去同步这台时间服务器时间 首先需要关闭这两台计算机的ntp服务
systemctl stop ntpd.servicecentOS7以下则service ntpd stop
systemctl disable ntpd.servicecentOS7以下则chkconfig ntpd off
systemctl status ntpd查看ntp服务状态pgrep ntpd查看ntp服务进程id同步第一台服务器linux01的时间 ntpdate hadoop102 使用root用户制定计划任务,周期性同步时间
crontab -e
*/10 * * * * /usr/sbin/ntpdate hadoop102重启定时任务
systemctl restart crond.servicecentOS7以下使用service crond restart 其他台机器的配置同理。 3配置oozie-site.xml文件 属性oozie.processing.timezone 属性值GMT0800 解释修改时区为东八区区时 注该属性去oozie-default.xml中找到即可 4修改js框架中的关于时间设置的代码
$ vi /opt/module/cdh/oozie-4.0.0-cdh5.3.6/oozie-server/webapps/oozie/oozie-console.js修改如下
function getTimeZone() {Ext.state.Manager.setProvider(new Ext.state.CookieProvider());return Ext.state.Manager.get(TimezoneId,GMT0800);
}5重启oozie服务并重启浏览器一定要注意清除缓存
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ bin/oozied.sh stop
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ bin/oozied.sh start6拷贝官方模板配置定时任务\
$ cp -r examples/apps/cron/ oozie-apps/7修改模板job.properties和coordinator.xml以及workflow.xml
job.properties
nameNodehdfs://hadoop102:8020
jobTrackerhadoop103:8032
queueNamedefault
examplesRootoozie-appsoozie.coord.application.path${nameNode}/user/${user.name}/${examplesRoot}/cron
#start必须设置为未来时间否则任务失败
start2017-07-29T17:000800
end2017-07-30T17:000800
workflowAppUri${nameNode}/user/${user.name}/${examplesRoot}/cronEXEC3p3.sh
coordinator.xml
coordinator-app namecron-coord frequency${coord:minutes(5)} start${start} end${end} timezoneGMT0800 xmlnsuri:oozie:coordinator:0.2
actionworkflowapp-path${workflowAppUri}/app-pathconfigurationpropertynamejobTracker/namevalue${jobTracker}/value/propertypropertynamenameNode/namevalue${nameNode}/value/propertypropertynamequeueName/namevalue${queueName}/value/property/configuration/workflow
/action
/coordinator-app
workflow.xml
workflow-app xmlnsuri:oozie:workflow:0.5 nameone-op-wf
start top3-shell-node/action namep3-shell-nodeshell xmlnsuri:oozie:shell-action:0.2job-tracker${jobTracker}/job-trackername-node${nameNode}/name-nodeconfigurationpropertynamemapred.job.queue.name/namevalue${queueName}/value/property/configurationexec${EXEC3}/execfile/user/atguigu/oozie-apps/cron/${EXEC3}#${EXEC3}/file!-- argumentmy_outputHello Oozie/argument--capture-output//shellok toend/error tofail//action
kill namefailmessageShell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]/message
/kill
kill namefail-outputmessageIncorrect output, expected [Hello Oozie] but was [${wf:actionData(shell-node)[my_output]}]/message
/kill
end nameend/
/workflow-app8上传配置
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ /opt/module/cdh/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -put oozie-apps/cron/ /user/admin/oozie-apps9启动任务
[atguiguhadoop102 oozie-4.0.0-cdh5.3.6]$ bin/oozie job -oozie http://hadoop102:11000/oozie -config oozie-apps/cron/job.properties -run注意Oozie允许的最小执行任务的频率是5分钟 第5章 常见问题总结 1Mysql权限配置 授权所有主机可以使用root用户操作所有数据库和数据表
mysql grant all on *.* to root% identified by 000000;
mysql flush privileges;
mysql exit;2workflow.xml配置的时候不要忽略file属性 3jps查看进程时注意有没有bootstrap 4关闭oozie 如果bin/oozied.sh stop无法关闭则可以使用kill -9 [pid]之后oozie-server/temp/xxx.pid文件一定要删除。 5Oozie重新打包时一定要注意先关闭进程删除对应文件夹下面的pid文件。可以参考第4条目 6配置文件一定要生效 起始标签和结束标签无对应则不生效配置文件的属性写错了那么则执行默认的属性。 7libext下边的jar存放于某个文件夹中导致share/lib创建不成功。 8调度任务时找不到指定的脚本可能是oozie-site.xml里面的Hadoop配置文件没有关联上。 9修改Hadoop配置文件需要重启集群。一定要记得scp到其他节点。 10JobHistoryServer必须开启集群要重启的。 11Mysql配置如果没有生效的话默认使用derby数据库。 12在本地修改完成的job配置必须重新上传到HDFS。 13将HDFS中上传的oozie配置文件下载下来查看是否有错误。 14Linux用户名和Hadoop的用户名不一致。