Oozie_示例
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oozie_示例相关的知识,希望对你有一定的参考价值。
Oozie 官方示例
解压oozie-examples.tar.gz 将examples/上传到HDFS家目录 $ bin/hdfs dfs -put /opt/cdh-5.6.3/oozie-4.0.0-cdh5.3.6/examples examples 试运行自带的wordcount示例examples/apps/map-reduce job-with-config-class.properties job.properties lib workflow-with-config-class.xml workflow.xml 修改example下/opt/cdh-5.6.3/oozie-4.0.0-cdh5.3.6/examples/apps/map-reduce/ job.properties nameNode=hdfs://hadoop09-linux-01.ibeifeng.com:8020 jobTracker=hadoop09-linux-01.ibeifeng.com:8032 功能: 指定workflow的地址,声明相关变量 workflow.xml 引用job.properties相关变量 配置工作流 运行一下 $ bin/oozie job -oozie http://hadoop09-linux-01.ibeifeng.com:11000/oozie -config examples/apps/map-reduce/job.properties -run 8088端口会出现两个执行进程,其中一个是launch仅仅执行map程序用于封装oozie 第二个进行执行mr程序 wf运行流程 command 提交任务 oozie读取job.properties 查找需要运行的wf的地址,将相应变量传递给wf 读取wf文件 start 节点 action 节点 OK -> end error -> kill 读取依赖的jar包(lib目录) sharelib的jar包支持
自定义实现workcount的workflow
测试wordcount程序 $ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar wordcount /input /output
也可用hadopp示例的wordcount oozie根目录下创建application文件夹,并将examples/apps/map-reduce/复制一份到application,用于配置自定义wordcount程序 上传application文件夹到hdfs(家目录,因为在job.properties下要配置该目录) 添加,修改applicatio/wc-wf目录下配置文件 job.properties examplesRoot=application/wc-wf inputDir=input outputDir=output workflow.xml <delete path="${nameNode}/${outputDir}"/> mapreduce.job.queuename=${queueName} mapreduce.job.map.class=org.apache.hadoop.wordcount.WCMap mapreduce.job.reduce.class=org.apache.hadoop.wordcount.WCReduce mapreduce.map.output.key.class=org.apache.hadoop.io.Text mapreduce.map.output.value.class=org.apache.hadoop.io.LongWritable mapreduce.job.output.key.class=org.apache.hadoop.io.Text mapreduce.job.output.value.class=org.apache.hadoop.io.LongWritable mapreduce.input.fileinputformat.inputdir=${nameNode}/${inputDir} mapreduce.output.fileoutputformat.outputdir=${nameNode}/${outputDir} 与mr程序中的driver如出一辙 将复制的application/wc-wf中的lib目录下jar包删除,并把wc.jar放入 重新上传文件运行 $ export OOZIE_URL="http://hadoop09-linux-01.ibeifeng.com:11000/oozie" $ bin/oozie job -config application/wc-wf/job.properties -run oozie 任务被kill 查看log日志发现 java.io.IOException: mapreduce.job.map.class is incompatible with map compatability mode 原因没使用 mapred.mapper.new-api = true 与 mapred.reducer.new-api = true
自定义shell的workflow
从example示例中复制一份shell到application,更名为shell-wf 在shell-wf目录中 创建一个shell脚本,简单测试 $HIVE_HOME/bin/hive -e "show databases" >> shell-rs.txt 依据官网文档修改部分配置 job.properties nameNode=hdfs://hadoop09-linux-01.ibeifeng.com:8020 jobTracker=hadoop09-linux-01.ibeifeng.com:8032 queueName=default examplesRoot=user/liuwl/application/shell-wf EXEC=test.sh oozie.wf.application.path=${nameNode}/${examplesRoot}/workflow.xml workflow.xml exec节点后添加 <file>${nameNode}/${examplesRoot}/${EXEC}#${EXEC}</file> 修改ok节点to end节点 上传shell-wf目录到hdfs 测试运行 $ export OOZIE_URL="http://hadoop09-linux-01.ibeifeng.com:11000/oozie" $ bin/oozie job -config application/wc-wf/job.properties -run
复杂DAG图设计(其实也就是顺序,并发执行多个job)
|----> hive action -->| start --> MR action --> shell action --> end |----> spark action -->| 一个简单的workflow: 先执行mraction 运行wordcount程序,然后使用shellaction 移动output下的part文件 复制一份上面的wc-wf文件夹 创建一个shel脚本 #!/bin/bash HADOOP_HOME=/opt/cdh-5.6.3/hadoop-2.5.0-cdh5.3.6 $HADOOP_HOME/bin/hdfs dfs -mv /output/p* / 修改job.properties与workflow.xml nameNode=hdfs://hadoop09-linux-01.ibeifeng.com:8020 jobTracker=hadoop09-linux-01.ibeifeng.com:8032 queueName=default examplesRoot=user/liuwl/application/dag-wf oozie.wf.application.path=${nameNode}/${examplesRoot}/workflow.xml inputDir=input outputDir=output EXEC=oozie.sh ===================================================================== 添加 <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> </shell> <ok to="end"/> <error to="fail"/> </action> 修改mr-node节点下OK节点为shell-node 测试运行 $ export OOZIE_URL="http://hadoop09-linux-01.ibeifeng.com:11000/oozie" $ bin/oozie job -config application/dag-wf/job.properties -run
coordinator的编写
基于时间的任务调度(起始时间,终止时间,频率) 关于时区 CST 中国标准时间(China Standard Time) UTC 协调世界时,又称世界标准时间 GMT 格林日志标准时间 OOZIE默认UTC与GMT本地时间相同,需要改为CST 使用date -R查看 是否为+0800 如果不是 cp /usr/zoneinfo/Asia/Shanghai /etc/localtime # ln -sf ... 或创建软连接 然后修改一下clock文件 vi /etc/sysconfig/clock ZONE="Asia/Shanghai" 修改oozie的时区 oozie.site.xml oozie.processing.timezone=GMT+0800 修改ext中js文件 oozie-server/webapps/oozie/oozie-console.js 查找GMT并修改为GMT+0800 重启oozie,清缓存查看页面 拷贝官方示例中的cron并修改 其中 job.properties nameNode=hdfs://hadoop09-linux-01.ibeifeng.com:8020 jobTracker=hadoop09-linux-01.ibeifeng.com:8032 queueName=default examplesRoot=user/liuwl/application/cron-wf oozie.coord.application.path=${nameNode}/${examplesRoot} start=2016-11-23T17:15+0800 end=2016-11-23T17:20+0800 workflowAppUri=${nameNode}/${examplesRoot} coordinator.xml <coordinator-app name="cron-coord" frequency="${coord:minutes(1)}" start="${start}" end="${end}" timezone="GMT+0800" xmlns="uri:oozie:coordinator:0.2"> 执行顺序 job.properties-->coordinator.xml(完成时间封装)-->workflow.xml(运行) 上传并测试运行 $ export OOZIE_URL="http://hadoop09-linux-01.ibeifeng.com:11000/oozie" $ bin/oozie job -config application/cron-wf/job.properties -run 问题,运行后报错,提示频率值太小,修改 oozie-site.xml添加下 oozie.service.coord.check.maximum.frequency=false 再测试一个使用linux crontb格式的coordinator,改一下coordinator.xml如frequency="*/2 * * * *"
以上是关于Oozie_示例的主要内容,如果未能解决你的问题,请参考以下文章