本帖最后由 丫丫 于 2016-12-12 17:46 编辑
问题导航
1、Oozie如何安装配置?
2、如何自定义实现workflow?
3、如何实现shell action
4、如何简单实现DAG图?
5、oozie的coordinator如何基于时间或者数据调度的workflow?
一、运行官方实例
1、解压Oozie目录下的oozie-examples.tar.gz
1、tar -zxvf oozie-examples.tar.gz
2、解压完成后会创建一个examples文件夹
2、将程序上传到HDFS的家目录
1、 bin/hdfs dfs -put /opt/cdh-5.3.6/oozie-4.0.0-cdh5.3.6/examples examples
2、
3、运行官方mapreduc
1、修改job.properties (定义了先关变量,指向了workflow.xml)
1、需要修改:
[mw_shl_code=text,true] nameNode=hdfs://hadoop-senior01.ibeifeng.com:8020
jobTracker=hadoop-senior01.ibeifeng.com:8032[/mw_shl_code]
2、workflow.xml(真正需要自己写的内容,Oozie的核心)
[mw_shl_code=text,true]定义各个节点的运行
任务流
控制流节点:start、end、kill、fork、join
动作节点:mr/shell/hive
-》mr action
-》configuration
-》放所有driver部分的配置
-》new API
-》shell action
-》file
-》脚本中的每一条命令在集群中的任何一台机器上都能执行
-》oozie会额外多一个mapreduce任务,只有map,用于程序的封装[/mw_shl_code]
3、运行程序
1、 bin/oozie job -oozie http://hadoop-senior01.ibeifeng.com:11000/oozie -config examples/apps/map-reduce/job.properties -run
2、报错:找不到HDFS
3、解决:修改oozie-site.xml 读取Hadoop的配置文件
[mw_shl_code=xml,true]
<property>
<name>oozie.service.HadoopAccessorService.hadoop.configurations</name>
<value>*=/opt/cdh-5.3.6/hadoop-2.5.0-cdh5.3.6/etc/hadoop</value>
</property>[/mw_shl_code]
4、重启oozie,重新运行
4、运行成功
1、运行命令中的job.properties指的是本地,建议,本地修改后,将修改后的上传(使本地与HDFS一致)
2、oozie中的workflow默认会启动一个map程序oozie:launcher,用于对job的封装,只有map任务
4、步骤总结
1、检测环境:sharelib
2、运行命令
3、bin/oozie job -oozie http://hadoop-senior01.ibeifeng.com:11000/oozie -config examples/apps/map-reduce/job.properties -run
1、 job.properties的功能:a.对变量的定义;b.指向要运行的workflow的地址
2、workflow.xml:定义你的任务流:如果有修改,必须重新上传
1、运行
1、运行workflow.xml
2、 jar包
二、自定义实现workflow
1、实现Wordcount的workflow
2、创建HDFS目录及上传文件
1、bin/hdfs dfs -mkdir /input
2、bin/hdfs dfs -put /opt/datas/wc.input /input
3、打包测试jar包
bin/yarn jar /opt/datas/wc2.jar org.apache.hadoop.wordcount.WordCount /input /outputtest
4、准备工作
1、Oozie下创建:mkdir application
2、进入application目录,先拷贝一份示例到当前目录下:cp -r ../examples/apps/map-reduce/ ./
3、重命名文件夹:mv map-reduce/ wc-wf
5、 编写workflow
1、job.properties:修改workflow的地址,添加自定义的变量
[mw_shl_code=text,true] nameNode=hdfs://hadoop-senior01.ibeifeng.com:8020
jobTracker=hadoop-senior01.ibeifeng.com:8032
queueName=default
examplesRoot=user/beifeng/application
oozie.wf.application.path=${nameNode}/${examplesRoot}/wc-wf/workflow.xml
inputDir=input
outputDir=output[/mw_shl_code]
2、workflow.xml:配置可以在yarn上查找
[mw_shl_code=applescript,true]-》driver自定义的实现
-》队列名称
-》map和reduce的类
-》输入输出目录
-》shuffle
-》输出的类型 [/mw_shl_code]
6. 替换lib目录下jar包
1、cp /opt/datas/wc2.jar wc-wf/lib/
2、
7、上传运行
1、上传文件到hdfs用户目录:
bin/hdfs dfs -put /opt/cdh-5.3.6/oozie-4.0.0-cdh5.3.6/application/
2、 第一种运行方式:
bin/oozie job -oozie http://hadoop-senior01.ibeifeng.com:11000/oozie -config application/wc-wf/job.properties -run
3、 第二种运行方式(临时性的):
export OOZIE_URL="http://hadoop-senior01.ibeifeng.com:11000/oozie"bin/oozie job -config application/wc-wf/job.properties -run
4、报错:配置名称与当前模式不匹配
查看错误:[beifeng@hadoop-senior01 oozie-4.0.0-cdh5.3.6]$ more logs/oozie.log
workflow.xml设置:
mapred.mapper.new-api=true
mapred.reducer.new-api=true
5、重新上传workflow.xml并重新运行
1、重新上传:
1、bin/hdfs dfs -rm -r application/wc-wf
2、bin/hdfs dfs -put /opt/cdh-5.3.6/oozie-4.0.0-cdh5.3.6/application/wc-wf/ application/
2、 重新运行:bin/oozie job -config application/wc-wf/job.properties –run
6、运行结果
8、workflow.xml代码
[mw_shl_code=xml,true]<workflow-app xmlns="uri:oozie:workflow:0.2" name="map-reduce-wf"> <start to="mr-node"/> <action name="mr-node"> <map-reduce> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <prepare> <delete path="${nameNode}/${outputDir}"/> </prepare> <configuration> <!-- set the queue name --> <property> <name>mapreduce.job.queuename</name> <value>${queueName}</value> </property> <!-- set the new api --> <property> <name>mapred.mapper.new-api</name> <value>true</value> </property> <property> <name>mapred.reducer.new-api</name> <value>true</value> </property> <!-- set the map class and the reduce class --> <property> <name>mapreduce.job.map.class</name> <value>org.apache.hadoop.wordcount.WCMap</value> </property> <property> <name>mapreduce.job.reduce.class</name> <value>org.apache.hadoop.wordcount.WCReduce</value> </property> <!-- set the output key and value type --> <property> <name>mapreduce.map.output.key.class</name> <value>org.apache.hadoop.io.Text</value> </property> <property> <name>mapreduce.map.output.value.class</name> <value>org.apache.hadoop.io.LongWritable</value> </property> <property> <name>mapreduce.job.output.key.class</name> <value>org.apache.hadoop.io.Text</value> </property> <property> <name>mapreduce.job.output.value.class</name> <value>org.apache.hadoop.io.LongWritable</value> </property> <!-- set the inputDir and outputDir --> <property> <name>mapreduce.input.fileinputformat.inputdir</name> <value>${nameNode}/${inputDir}</value> </property> <property> <name>mapreduce.output.fileoutputformat.outputdir</name> <value>${nameNode}/${outputDir}</value> </property> </configuration> </map-reduce> <ok to="end"/> <error to="fail"/> </action> <kill name="fail"> <message>Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message> </kill> <end name="end"/></workflow-app>[/mw_shl_code]
三、shell action
1、拷贝官方案例到application
[mw_shl_code=text,true] [beifeng@hadoop-senior01 application]$ cp -r ../examples/apps/shell/ ./
重命名:mv shell/ sh-wf[/mw_shl_code]
2、编写脚本
[mw_shl_code=text,true]头一定要写,一定要写对 #! /bin/bash/
#!/bin/bash
HIVE_HOME=/opt/cdh-5.3.6/hive-0.13.1-cdh5.3.6
$HIVE_HOME/bin/hive -e "show databases" >/opt/datas/oozie.file[/mw_shl_code]
3、编写job.properties和workflow
1、job.properties
[mw_shl_code=text,true]nameNode=hdfs://hadoop-senior01.ibeifeng.com:8020
jobTracker=hadoop-senior01.ibeifeng.com:8032
queueName=default
examplesRoot=user/beifeng/application/sh-wf
oozie.wf.application.path=${nameNode}/${examplesRoot}/workflow.xml
EXEC=oozie.sh [/mw_shl_code]
2、 workflow
[mw_shl_code=text,true]<workflow-app xmlns="uri:oozie:workflow:0.4" name="shell-wf">
<start to="shell-node"/>
<action name="shell-node">
<shell xmlns="uri:oozie:shell-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<exec>${EXEC}</exec>
<file>${nameNode}/${examplesRoot}/${EXEC}#${EXEC}</file>
<!--Copy the executable to compute node's current working directory -->
</shell>
<ok to="end"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>Incorrect output, expected [Hello Oozie] but was [${wf:actionData('shell-node')['my_output']}]</message>
</kill>
<end name="end"/>
</workflow-app>[/mw_shl_code] 4、 上传运行
1、上传
bin/hdfs dfs -put /opt/cdh-5.3.6/oozie-4.0.0-cdh5.3.6/application/sh-wf/ application/
2、运行
[mw_shl_code=text,true]export OOZIE_URL="http://hadoop-senior01.ibeifeng.com:11000/oozie"
bin/oozie job -config application/sh-wf/job.properties -run [/mw_shl_code]
5、注意问题
1、 所运行的计算节点必须可执行脚本中的每一条命令
四、复杂DAG图的简单实现
1、使用workflow实现Mapreduce与shell脚本,功能为先实现Mapreduce的wordcount,然后使用shell脚本将结果文件复制到hdfs的根目录
2、 job.properties
3、workflow.xml :主要是在结束时进入
4、 oozie.sh
5、 流程图
五、oozie的coordinator:基于时间或者数据调度的workflow
1、基于时间的调度
1、起始时间
2、调度频率
3、终止时间
2、 基于数据可用性的调度
3、调整时区
1、检查时区,修改Linux时区
1、查看指令:date -R
2、正常:+0800
3、不正常: [mw_shl_code=text,true]-》删除当前时区
sudo rm -rf /etc/localtime
-》重建(软连接)
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
-》重新检测 [/mw_shl_code] 2、修改oozie的时区:在oozie-site.xml添加
[mw_shl_code=xml,true]<property>
<name>oozie.processing.timezone</name>
<value>GMT+0800</value>
</property>[/mw_shl_code]
3、重启oozie
4、界面中检测时区
修改oozie-server/webapps/oozie/oozie-console.js
getTimezone方法中的GMT为GMT+0800
清空一下浏览器的缓存,刷新查看
、
5、 调整linux时间
sudo date -s "2016-12-03 16:44:00"
4、 关于时间调度的workflow
1、 job.properties:指向了coordinator.xml地址
2、coordinator.xml:起始时间,频率,终止时间,指向workflow的地址
3、 workflow.xml
5、运行
1、指令
[mw_shl_code=text,true]export OOZIE_URL="http://hadoop-senior01.ibeifeng.com:11000/oozie"
bin/oozie job -config application/coordinator/job.properties -run[/mw_shl_code]
2、 运行时间:包头不包尾(不包括结尾的时间)
3、运行是提示最小时间不能设置为2,在oozie-site.xml添加下面参数为false
oozie.service.coord.check.maximum.frequency
6、Linux crontab的格式
1、coordinator.xml 文件中:frequency=”/1 * * *”
来源:blog.csdn
作者:H_Hao |