Oozie 01-概览

  • Oozie是一个管理Apache Hadoop作业(job)的工作流(workflow)调度系统
  • Oozie工作流作业(workflow job)是由多个动作(action)构成的有向无环图(Directed Acyclic Grahp,DAG)
  • Oozie协调器作业(coordinator job)是由时间或数据可用触发的周期性Oozie工作流作业
  • Oozie整合了Hadoop栈的其余部分,可支持独立性的Hadoop作业(比如Java map-reduce,streaming map-reduce,Pig,Hive,Sqoop,Distcp),同时也支持系统相关性的作业(比如java程序和shell脚本)

Apache Hadoop工作流引擎

  • Oozie v1是一个基于工作流引擎的服务器,专用于运行工作流作业中的action。这些action又是用来执行Hadoop Map/Reduce和Pig作业的
  • Oozie v2是一个基于协调器引擎的服务器,专用于运行通过时间或数据触发的工作流。它能连续不断的运行定时(比如每小时一次)或数据可用时(等到工作流输入数据出现为止)的工作流
  • Oozie v3是一个基于束引擎(bundle engine)的服务器。束提供了一个较高层级的oozie抽象。该抽象用于批处理一个协调器应用集(a set of coordinator applications)。用户可在束层级“启动/停止/暂停/恢复/重运行”一个协调器作业集合,从而实现更好和更容易的操作控制。

Oozie工作流概览

Oozie是一个基于工作流引擎的服务器,专用于运行包含了Hadoop Map/Reduce和Pig作业的工作流。
Oozie是一个运行在Java servlet容器中的Java Web应用。
一个工作流是一些存在依赖关系action的有向无环图。从一个action到另一个action的依赖控制意味着,只有第一个action完成,第二个action才能开始运行。
Oozie工作流定义是通过hPDL(hadoop Process Definition Language)来描述的。
Oozie工作流action在远端系统(比如Hadoop,Pig)上启动作业。一旦action完成,远端系统回调Oozie通知action的执行完成,在该点Oozie得以继续处理工作流中的下一个action。
Oozie工作流包含控制流(control flow)节点和action节点。
控制流节点定义了工作流的开始和结束(比如start,end,fail节点),同时提供控制工作流执行路径的机制(比如decision,fork,join节点)。
action节点提供了一个让工作流触发计算任务或处理任务执行的机制。Ooize提供了对多种不同类型action的支持:Hadoop map-reduce,Hadoop file system,Pig,SSH,HTTP,eMail,sub-workflow。Oozie可扩展支持更多类型的action。
Oozie工作流可被参数化(在工作流的定义中使用形如${inputDir}的变量)。当提交一个工作流作业时,必须要提供参数的取值。适当的使用参数(比如使用不同的输出目录),多个完全一样的工作流作业可并发运行。

WordCount工作流示例

工作流图

hPDL定义的工作流:

<workflow-app name='wordcount-wf' xmlns="uri:oozie:workflow:0.1">
    <start to='wordcount'/>
    <action name='wordcount'>
        <map-reduce>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
                <property>
                    <name>mapred.mapper.class</name>
                    <value>org.myorg.WordCount.Map</value>
                </property>
                <property>
                    <name>mapred.reducer.class</name>
                    <value>org.myorg.WordCount.Reduce</value>
                </property>
                <property>
                    <name>mapred.input.dir</name>
                    <value>${inputDir}</value>
                </property>
                <property>
                    <name>mapred.output.dir</name>
                    <value>${outputDir}</value>
                </property>
            </configuration>
        </map-reduce>
        <ok to='end'/>
        <error to='end'/>
    </action>
    <kill name='kill'>
        <message>Something went wrong: ${wf:errorCode('wordcount')}</message>
    </kill/>
    <end name='end'/>
</workflow-app>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Zookeeper用于集群主备切换。 YARN让集群具备更好的扩展性。 Spark没有存储能力。 Spark的Ma...
    Yobhel阅读 7,357评论 0 34
  • 工作原因,大概一年前我认识了一个摄影师,女孩子,聊得来。她看我那时还是泡芙的微信头像又喜欢看老电影,开心的说,她有...
    不裹阅读 283评论 0 1
  • 生命就像一部诡谲的电影,你永远猜不到惊喜和意外,哪一个先来。从电影开始,便有曲终人散的的那天。可问题不在于渲染哀伤...
    虽独不孤阅读 206评论 0 1
  • 文/古月言 十七至二十七,牵手七年,分别三年,时间长的都快忘了当初喜欢你的原因,或许只是因为那天在教室转角,邂逅了...
    古月言阅读 895评论 3 8