开发者学堂课程【Oozie 知识精讲与实战演练:Apache Oozie- 实战操作一串联任务调度(依赖关系)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/716/detail/12790
Apache oozie- 实战操作-串联任务调度(依赖关系)
主要内容:
一、准备工作目录
二、准备调度文件
三、修改配置模板
四、上传调度任务到 hdfs
五、执行调度任务
一、准备工作目录
首先做一个准备工作目录,来到 oozie 的安装包根路径下,创建 sereval-action 文件夹,复制一下然后执行。
Cd/export/severs/ozzie-4.1.0-cdh5.14.0/ozzie_works mkdir-p sereval-actions
二、准备调度文件
将之前的 hive、shell、MR 的执行,进行串联成到一个 workflow。把下面的代码复制一下,第一个时 hive 脚本,第二个是 shell 脚本,第三个是一个 libjia 包。
代码如下:
cd /export/servers/oozie-4.1.0-cdh5.14.0/ozie works
cp hive2/script.q sereval-actions/
cp shell/hello.sh sereval-actions/
cp-ra map-reduce/lib sereval-actions/
经过这样的操作,就能在 server 中有了三个不同的资源。
有了这三个资源其实并没有任何意义,他们之间也不知道先执行什么。进行配置文件编写。
三、修改配置模板
重点就是 workflow.xml 的插件,在这可以通过 action 的流转流程来控制串联执行,开始来到 shell-node 当中,来到第一个 action,叫做 shell-node。
代码如下:
Kstart to="shell-node"/>
caction name-"shell-node">
$(jobTracker)s(nameNode}
mapred.job.queue.name$(queueName}
$(EXEC)
/user/root/oozie works/sereval-actions/$(EXEC)#$(EXEC)
第二个就会来到 mr-node,说明这个程序被串联起来了。如果第一个 action 执行成功,就来到 mr-node,执行失败就来到 fail。
代码如下:
action
name-"mr-node"
$(jobtracker)${nameNode
mapred.job.queue.name$(queueName}
准确来讲,Oozie 的串联是通过 action 的成功失败来控制的。
重点看这里成功 跳转到 hive2-nod,失败就跳转到 fail 节点。
这里执行的就是 hive sercle 语句。Action 的成功失败跳转是通过节点控制,形成首尾相连的串联任务。
代码如下:
Caction nama-"hive2-node">
$(jobTracker)S(nameNode)
cname>mapred.job.queue.name$(queueName)
$(jdbcURL) ceaript script.qc/ncrint>
INPUT=/user/$(wf:user())/$(examplesRoot/input-data/tablec/param)
四、上传调度任务到 hdfs
在这个串联中,先执行 shell 脚本,再执行 mr,最后执行 hive sercle 语句,这样提交上去就会形成一个串联任务,把文件上传到 cd.serval-action 路径下,文件可以直接复制上传,如果不方便可以传到桌面再上传,注意相关格式的调整。配置好这个插件,还有第二个参数很重要,叫做 job.properties,直接编辑,直接把这里的属性复制过来即可。
代码如下:
nameNode=hdfs://node-1:8020 jobTracker=node-1:8032 queueName=default
examplesRoot=oozie_works EXEC=hello.sh
outputDir=/oozie/output inputdir=/oozie/input
idbcURL=jdbc:hive2://node-1:10000/default oozie.use.system.libpath=true
#配置我们文件上传到hdfs的保存路径实际上就是在 hdfs的 /user/root/oozieworks/sereval-actions 这个路径下ooziewfapplicationpath=${nameNodel/user/S(user.name/${examplesRoot/sereval actions/workflow.xml
复制过来还需要注意路径和 ID 的区别,node 在 node-1,不是在9000,这里需要修改,这些都没有问题。另外需要注意的是这里需要换行。
上面的注释可以根据需要进行删除,整个过程就是细心的过程,保存完毕后把这个文件连同下面的文件上传到 hdfs 中,直接复制进行操作,这一步就把配置任务和相关资源一起上传到了指定路径下,这个路径可以做一个查看,这里多了一个serveral-action,
如果路径不对,执行调度的时候就找不到,肯定会有问题。
接下来通过调度的命令进行执行,复制一下,主要解决换行问题,横线要注意用英文,细节不能搞错。如果出现了 job:0000003-190608181008722 这样一串编号,说明提交成功。
最后复制命令进行提交。
代码如下:
bin/oozie job-oozie http://node-1:11000/oozie-config opzie works/sereval-actions/job.properties -run
五、执行调度任务
提交之后查看一下,首先执行了一个 shell,当他执行完以后,发现并没有结束,刷新一下,接下来实行的 have,看最终的 mr 程序是不是需要的程序,,经过一段时间的等待,再刷新,oozie 最终结束。
通过页面,可以刷新 done jobs 就可以结束了。
最后做一个简单的总结,oozie 调度串联任务,通过 action 节点的成功,失败控制执行的流程,如果上一个 action 成功,跳转到下一个 action,这样就可以变成首尾相连的串联任务。