问题
工作中可能需要好几个 MapReduce 作业(job)来协作完成,往往一个job的输出会被当做另一个job的输入来使用,这个时候就涉及到了数据流的处理。
程序员不可能就盯着程序,等一个 job 运行完,再去运行下一个 job
一般的做法就是通过 shell 脚本实现,但是如果涉及到的工作流很复杂(比方说有1,2,3,4四个作业,1的输出作为2 3 4的输入,然后2 3的结果运算之后再和1的结果进行某种运算……最后再输出),就很费时费力的。
解决
oozie,把多个MR作业组合为一个逻辑工作单元(一个工作流),从而自动完成任务调用的工具。
介绍
Oozie是一个工作流调度系统,用于管理 Apache Hadoop 作业
将常见的mr任务启动,hdfs操作,shell调度,hive操作等通过统一的方式进行连贯调度.
将复杂的依赖关系,时间触发,事件触发使用
xml语言进行表达,提高开发效率.一组任务使用一个DAG(有向无环图)来表示,图形化的表达,流程逻辑更加清晰.
支持很多种任务调度,能完成大部分的hadoop任务处理.
任务 和 有向无环图(DAG)
任务本身是一个有向无环图(DAG)
有开始、有方向、有结束,在每个节点上可以配置 任务
fork 标签后面的 MR job 和 Hive job 是 并行执行 的,都成功后通过 join 节点合并
应用场景
- 按顺序执行一系列任务
- 并行处理任务
- 定时执行任务
架构
由 Oozie client 和 Oozie Server两个组件构成
Oozie Server 运行于Java Servlet容器(Tomcat)中的web程序

