基于Hue和Oozie的自动化调度
Posted 杀智勇双全杀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Hue和Oozie的自动化调度相关的知识,希望对你有一定的参考价值。
基于Hue和Oozie的自动化调度
任务流调度需求
整体需求
相同的业务线,有不同的需求时,会用多个程序来实现。这些程序组合在一起,基于工作流(按照执行顺序)来实现任务流(单个某种功能的脚本)的自动化运行来实现需求。
基于时间的任务运行
单个/多个任务在某些固定时间(例如:每天)执行。
基于运行依赖关系的任务运行
某个/某些Job必须等待某个/某些Job完成才能运行。
调度类型
定时调度
基于某种时间的规律进行调度运行。
依赖调度
基于某种依赖关系进行调度运行。
任务流调度工具
Linux Crontab
Linux中自带了这个可以定时执行任务的工具(也只能实现定时执行)。。。crontab -e
可以编辑。。。
* * * * * command
分钟 小时 日 月 周几
如果不是定时任务,这货就无能为力了。
Oozie
Cloudera的Hadoop生态圈调度工具。功能很强大,能满足几乎所有常规的任务流调度的需求,也支持 DAG(Direct Acyclic Graph)单向无环流程调度。其本身并不是分布式的,而是依赖于MapReduce实现分布式,在11000端口打开后可以看到原生交互对新手极不友好,监控不完善,难学难用:
Oozie官网
Oozie基于DAG实现依赖调度使用WorkFlow
,基于定时器实现定时调度使用Coordinator
。功能全面且强大,但是这货是基于Hadoop平台的分布式离线任务流调度(底层依赖MapReduce,将工作流变成MapReduce程序并提交给YARN运行,由YARN来将不同的工作流分配到不同的机器上运行,由此构建分布式调度系统),原生是手写XML配置文件:
<start to="first">
<action name="first">
<shell>
<path>xxx.sh</path>
<args></args>
</shell>
<ok to="second"> </ok>
<error to="kill"></error>
</action>
<action name ="second">
<spark>
<jar></jar>
<class></class>
……
</spark>
<ok to="third"> </ok>
<error to="kill"></error>
<action>
<action name ="forth">
<hive>
<scprit></scprit>
<path></path>
……
</hive>
<ok to="end"> </ok>
<error to="kill"></error>
<action>
<kill name="kill">
kill
</kill>
<end name="end">
end
</end>
想开发个顺序执行的串行流程还挺费劲。。。其中:
控制节点:start、end、kill用于控制程序运行的流程。
start:开始节点。
end:终止节点。
kill:强制退出节点。
fork:开始分支(多任务并行)。
join:结束分支。
程序节点:action。
Zeus
阿里基于Hadoop1老版本开发,后放弃了这货,不支持Hadoop。后续携程更新。
Azkaban
LinkedIn开发。Azkaban官网:
在3.x之后支持完全分布式,自身也是分布式调度系统,UI对新手很友好。有很多插件可以协助完成调度功能。
Hues中使用Oozie
原生方式太难用。在8888端口打开Hue的Browser界面:
对新手很友好。
改一下模式:
拖拽即可搞定流程。。。太方便了!!!
构建工作流
先准备一些脚本:
mkdir /export/data/flow
使用VIM写4个脚本(脚本名称为test01.sh、test02.sh、test03.sh、test04.sh,内容当然也要改!!!):
#!/bin/bash
echo "this is test01"
上传到HDFS(∵不确定会被哪个节点的MapReduce执行,放到HDFS可以实现分布式):
hdfs dfs -put /export/data/flow /user/oozie/
这个图标就是Shell,拖到下边,缩放可能影响UI,鼠标变色即可。
还没完!!!需要再添加一次Files。。。
WorkFlow
先构建个串行的:
右上角点保存。然后就可以Submit执行:
这种报警不用管。
可以看进度,由于走MapReduce,会很慢。
Fork && Join
把test03拖到test02左边或右边即可出现分叉选择。。。很简单,不解释。
这个图标拖下来会出现子流。也不难。。。
定时调度
有GUI还是很方便的。。。
自动化调度
按照需求,先把Sqoop、Shell、SQL等脚本写好,再提交给Oozie简单拖拽即可配置工作流程与调度时机。
以上是关于基于Hue和Oozie的自动化调度的主要内容,如果未能解决你的问题,请参考以下文章
问题记录CDH版Hue提交Oozie Coordinator调度报500异常
数据采集+调度:cdh5.8.0+mysql5.7.17+hadoop+sqoop+hbase+oozie+hue