一、为什么需要Oozie?
一项工作可能需要多个hadoop作业(job)来协作完成,而一个job的输出可能作为另一个job的输入,此时就涉及到了数据流的处理。
我们不可能就盯着程序,等它运行完再去运行下一个程序。所以,一般的做法就是通过shell来做,但是如果涉及到的工作流很复杂(比方说有1,2,3,4四个作业,1的输出作为2 3 4的输入,然后2 3的结果运算之后再和1的结果进行某种运算……最后再输出)是很费时费力的。这里就需要用到Oozie——一个能把多个MR作业组合为一个逻辑工作单元(一个工作流),从而自动完成任务调用的工具。
Note:Oozie本质就是一个作业协调工具(底层原理是通过将xml语言转换成mapreduce程序来做,但只是在集中map端做处理,避免shuffle的过程)
二、 Oozie是什么?
Oozie是用于 Hadoop 平台的开源的工作流调度引擎。
是用来管理Hadoop作业。
是属于web应用程序,由Oozie client和Oozie Server两个组件构成。
Oozie Server运行于Java Servlet容器(Tomcat)中的web程序。
简单的说Oozie是一个工作流引擎。只不过它是一个基于Hadoop的工作流引擎,在实际工作中,遇到对数据进行一连串的操作的时候很实用,不需要自己写一些处理代码了,只需要定义好各个action,然后把他们串在一个工作流里面就可以自动执行了,对于大数据的分析工作非常有用。
三、 Hadoop目前已经存在的调度框架
框架一:Crontab
Crontab是针对每个用户而言的,被用来提交和管理用户需要周期性执行的任务。
语法:
crontab(选项)(参数)
###1.选项
-e:编辑该用户的计时器设置;
-l:列出该用户的计时器设置;
-r:删除该用户的计时器设置;
-u<用户名称>:指定要设定计时器的用户名称。
###2.参数
crontab文件:指定包含待执行任务的crontab文件。
小例子:
例子:每隔一分钟,将当前时间写到一个日志文件里
### 1. 为当前hadoop用户添加一个任务
$ crontab -e
## 添加我们的第一条命令
*/1 * * * * /bin/date >> /home/hadoop/datas/hadoop-date.log
针对hadoop任务作业调度如下所示:
* maprecude
/opt/cloudera/hadoop/bin/yarn jar xxx.jar input output
* hive
/opt/cloudera/hive/bin/hive -f hive-select-bflog.sql
* sqoop
/opt/cloudera/sqoop/bin/sqoop --options-file sqoop-inp.txt
* shell
/bin/sh xxx.sh
*hive
*sqoop
框架二:Azkaban
Azkaban是开源的工作流管理器,有管理界面,一般功能都可以满足,但功能有限。
官网网址:https://azkaban.github.io
框架三:Oozie
Oozie尤其适合于做数据仓库ETL的公司使用,如电商公司。
官网网址:http://oozie.apache.org/
框架四:Zeus
Zeus是阿里开源的Hadoop平台管理工具,相较于Crontab增加了监控界面。
官网网址:https://github.com/michael8335/zeus2
四、 Oozie的功能架构
Oozie是一个基于工作流引擎的开源框架,是由Cloudera公司贡献给Apache的,它能够提供对Hadoop MapReduce和Pig Jobs的任务调度与协调。Oozie需要部署到Java Servlet容器中运行。
所谓工作流,即是指数据import进HDFS,然后用hive分析,然后将分析结果集export,把不同的结果集合并成最终结果,将不同的业务进行编排。Oozie的工作流任务是DAG(有向无环图)。
所谓调度,即是指对作业或任务的定时执行,或者是事件的触发执行。触发执行的时机:在指定时间触发执行,或者当某目录下有数据集时触发执行。
Oozie集成了Hadoop的很多框架,如Java MapReduce、Streaming MapReduce、Pig、Hive、Sqoop、Distcp。
一个Oozie Job也是一个MapReduce程序,仅仅只有map任务的程序,是分布式可扩展的。针对不同类型的任务编写的workflow,可以写成模板来直接套用。
Oozie同JBoss jBPM提供的jPDL一样,也提供了类似的流程定义语言hPDL,通过XML文件格式来实现流程的定义。对于工作流系统,一般都会有很多不同功能的节点,比如分支、并发、汇合等等。
Oozie定义了控制流节点(Control Flow Nodes)和动作节点(Action Nodes),其中控制流节点定义了流程的开始和结束,以及控制流程的执行路径(Execution Path),如decision、fork、join等;而动作节点包括Hadoop map-reduce、Hadoop文件系统、Pig、SSH、HTTP、eMail和Oozie子流程。
五、Oozie的三大版本
oozie v1是基于workflow的;
oozie v2是基于coodinator的;
oozie v3是基于bundle的。
未完,待续!