Oozie实例
2016-12-09 16:57
169 查看
一、运行官方实例
解压Oozie目录下的oozie-examples.tar.gztar -zxvf oozie-examples.tar.gz
解压完成后会创建一个examples文件夹
将程序上传到HDFS的家目录
bin/hdfs dfs -put /opt/cdh-5.3.6/oozie-4.0.0-cdh5.3.6/examples examples
运行官方mapreduce
修改job.properties (定义了先关变量,指向了workflow.xml)
需要修改:
nameNode=hdfs://hadoop-senior01.ibeifeng.com:8020 jobTracker=hadoop-senior01.ibeifeng.com:8032
workflow.xml(真正需要自己写的内容,Oozie的核心)
定义各个节点的运行 任务流 控制流节点:start、end、kill、fork、join 动作节点:mr/shell/hive -》mr action -》configuration -》放所有driver部分的配置 -》new API -》shell action -》file -》脚本中的每一条命令在集群中的任何一台机器上都能执行 -》oozie会额外多一个mapreduce任务,只有map,用于程序的封装
运行程序
bin/oozie job -oozie http://hadoop-senior01.ibeifeng.com:11000/oozie -config examples/apps/map-reduce/job.properties -run
报错:找不到HDFS
解决:修改oozie-site.xml 读取hadoop的配置文件
<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>
重启oozie,重新运行
运行成功
运行命令中的job.properties指的是本地,建议,本地修改后,将修改后的上传(使本地与HDFS一致)
oozie中的workflow默认会启动一个map程序oozie:launcher,用于对job的封装,只有map任务
步骤总结
检测环境:sharelib
运行命令
bin/oozie job -oozie http://hadoop-senior01.ibeifeng.com:11000/oozie -config examples/apps/map-reduce/job.properties -run
job.properties的功能:a.对变量的定义;b.指向要运行的workflow的地址
workflow.xml:定义你的任务流:如果有修改,必须重新上传
运行
运行workflow.xml
jar包
二、自定义实现workflow
实现Wordcount的workflow创建HDFS目录及上传文件
bin/hdfs dfs -mkdir /input
bin/hdfs dfs -put /opt/datas/wc.input /input
打包测试jar包
bin/yarn jar /opt/datas/wc2.jar org.apache.hadoop.wordcount.WordCount /input /outputtest
准备工作
Oozie下创建:
mkdir application
进入application目录,先拷贝一份示例到当前目录下:
cp -r ../examples/apps/map-reduce/ ./
重命名文件夹:
mv map-reduce/ wc-wf
编写workflow
job.properties:修改workflow的地址,添加自定义的变量
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
workflow.xml:配置可以在yarn上查找
-》driver自定义的实现 -》队列名称 -》map和reduce的类 -》输入输出目录 -》shuffle -》输出的类型
6. 替换lib目录下jar包
cp /opt/datas/wc2.jar wc-wf/lib/
上传运行
上传文件到hdfs用户目录:
bin/hdfs dfs -put /opt/cdh-5.3.6/oozie-4.0.0-cdh5.3.6/application/
第一种运行方式:
bin/oozie job -oozie http://hadoop-senior01.ibeifeng.com:11000/oozie -config application/wc-wf/job.properties -run
第二种运行方式(临时性的):
export OOZIE_URL="http://hadoop-senior01.ibeifeng.com:11000/oozie" bin/oozie job -config application/wc-wf/job.properties -run
报错:配置名称与当前模式不匹配
查看错误:[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
重新上传workflow.xml并重新运行
重新上传:
bin/hdfs dfs -rm -r application/wc-wf bin/hdfs dfs -put /opt/cdh-5.3.6/oozie-4.0.0-cdh5.3.6/application/wc-wf/ application/
重新运行:
bin/oozie job -config application/wc-wf/job.properties –run
运行结果
workflow.xml代码
<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>
三、shell action
拷贝官方案例到application[beifeng@hadoop-senior01 application]$ cp -r ../examples/apps/shell/ ./ 重命名:mv shell/ sh-wf
编写脚本
头一定要写,一定要写对 #! /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
编写job.properties和workflow
job.properties
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
workflow
<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>
上传运行
上传
bin/hdfs dfs -put /opt/cdh-5.3.6/oozie-4.0.0-cdh5.3.6/application/sh-wf/ application/
运行
export OOZIE_URL="http://hadoop-senior01.ibeifeng.com:11000/oozie" bin/oozie job -config application/sh-wf/job.properties -run
注意问题
所运行的计算节点必须可执行脚本中的每一条命令
四、复杂DAG图的简单实现
使用workflow实现Mapreduce与shell脚本,功能为先实现Mapreduce的wordcount,然后使用shell脚本将结果文件复制到hdfs的根目录job.properties
workflow.xml :主要是在结束时进入
oozie.sh
流程图
五、oozie的coordinator:基于时间或者数据调度的workflow
基于时间的调度起始时间
调度频率
终止时间
基于数据可用性的调度
调整时区
检查时区,修改Linux时区
查看指令:date -R
正常:+0800
不正常:
-》删除当前时区 sudo rm -rf /etc/localtime -》重建(软连接) ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime -》重新检测
修改oozie的时区:在oozie-site.xml添加
<property> <name>oozie.processing.timezone</name> <value>GMT+0800</value> </property>
重启oozie
界面中检测时区
修改oozie-server/webapps/oozie/oozie-console.js
getTimezone方法中的GMT为GMT+0800
清空一下浏览器的缓存,刷新查看
调整linux时间
sudo date -s "2016-12-03 16:44:00"
关于时间调度的workflow
job.properties:指向了coordinator.xml地址
coordinator.xml:起始时间,频率,终止时间,指向workflow的地址
workflow.xml
运行
指令
export OOZIE_URL="http://hadoop-senior01.ibeifeng.com:11000/oozie" bin/oozie job -config application/coordinator/job.properties -run
运行时间:包头不包尾(不包括结尾的时间)
运行是提示最小时间不能设置为2,在oozie-site.xml添加下面参数为false
oozie.service.coord.check.maximum.frequency
Linux crontab的格式
coordinator.xml 文件中:frequency=”/1 * * *”
相关文章推荐
- mapreduce 程序实例:hotlink统计程序及其oozie 调度
- oozie上传实例解读
- oozie的安装和部署及实例
- js解析一个XML字符串 - 跨浏览器的实例
- 实例路由器接交换机划分VLAN
- 实例7:上传下载文件
- oci程序学习2--一个实例
- sourcegrid 应用实例(全部来自官网下载的例子)——Use of Controllers: Cursor, Click event, ContextMenu and ToolTip
- MVCPager入门实例
- Ajax Control Toolkit使用实例 (2) Accordion
- 使用google的zxing类生成一维码、二维码实例
- BP神经网络的设计实例(MATLAB编程) .
- Spring + Quartz配置实例
- AM pool中的AM实例的生命周期
- CloudStack 打开实例Console报错分析
- PHP webservice 接口实例
- Json转换利器Gson之实例一-简单对象转化和带泛型的List转化
- File类的常用方法实例
- java rmi 实例
- akka 2.3.11 实例