定时任务调度——oozie总结

简介

(翻译自官网

Oozie是一个用于管理Apache Hadoop作业的工作流调度程序系统。

Oozie Workflow job是由多个Action组成的有向无环图(DAG)。

Oozie Coordinator job是根据时间(频率)和数据可用性触发的可重复执行的Oozie Workflow job(简单讲就是根据时间或数据条件,规划workflow的执行)。

Oozie与Hadoop技术栈的项目集成,支持多种类型的Hadoop作业(例如Java map-reduce,Streaming map-reduce,Pig,Hive,Sqoop和Distcp,Spark)以及系统特定的工作(例如Java程序和shell脚本)。

Oozie是一个可水平扩展,可靠和可使用扩展插件(scalable, reliable and extensible)的系统。

使用oozie命令行执行shell workflow

这里使用cdh虚拟机自带的oozie examples中的例子,执行hdfs dfs -put examples examples,将examples上传到hdfs。
打开apps/shell/ 可以看到job.properties和workflow.xml两个文件,在workflow.xml中定义action和workflow,在job.properties中定义各种变量。示例如下:

job.properties

nameNode=hdfs://quickstart.cloudera:8020 #指定hadoop的nameNode
jobTracker=quickstart.cloudera:8032 #指定jobTracker,如果使用yarn则指定为resource manager的applications manager端口
queueName=default
examplesRoot=examples

oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/shell #指定workflow.xml的位置

workflow.xml

<workflow-app xmlns="uri:oozie:workflow:0.4" name="shell-wf">
<start to="shell-node"/>
<action name="shell-node">
    <shell xmlns="uri:oozie:shell-action:0.2">
        <job-tracker>${jobTracker}</job-tracker>
        <name-node>${nameNode}</name-node>
        <configuration>
            <property>
                <name>mapred.job.queue.name</name>
                <value>${queueName}</value>
            </property>
        </configuration>
        <exec>echo</exec>
        <argument>my_output=Hello Oozie</argument>
        <capture-output/>
    </shell>
    <ok to="check-output"/>
    <error to="fail"/>
</action>
<decision name="check-output">
    <switch>
        <case to="end">
            ${wf:actionData('shell-node')['my_output'] eq 'Hello Oozie'}
        </case>
        <default to="fail-output"/>
    </switch>
</decision>
<kill name="fail">
    <message>Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<kill name="fail-output">
    <message>Incorrect output, expected [Hello Oozie] but was [${wf:actionData('shell-node')['my_output']}]</message>
</kill>
<end name="end"/>
</workflow-app>

可以看到这里定义了一个shell workflow,它的DAG如下:

image

首先是start,end,kill三个控制节点,分别指定了workflow开始时,结束时,kill时的行为。

start指向了一个名为shell-node的action,该action执行了ehco命令,并使用capture-output获取标准输出。如果执行成功,则进入decision node check-output如果输出结果正确则顺利结束,否则输出错误信息。

然后使用以下命令测试(这里的config是使用的是本地文件)

oozie job -oozie http://quickstart.cloudera:11000/oozie -config ~/oozie-examples/examples/apps/shell/job.properties -dryrun

如果成功,会显示OK

然后使用一下命令执行该workflow

oozie job -oozie http://quickstart.cloudera:11000/oozie -config ~/oozie-examples/examples/apps/shell/job.properties -run

最后,使用oozie job -oozie http://quickstart.cloudera:11000/oozie -info workflowID查看任务运行状态

也可以在hue中或者oozie web控制台中查看任务运行状态。

配置hive任务

数据准备:使用了权力与荣耀2017 ios的addcash的数据,test.hql(插入一条数据)

首先需要上传hive-site.xml到hdfs,Oozie需要通过该文件找到Hive Metastore,另外上传写好的hql文件到hdfs。然后向workflow中加入hive script action。并按图中的配置设置好hive脚本和hive-site.xml。保存即可。

image

写workflow.xml和使用hue配置action,两者是等价的。

最后使用coordinator设定每小时执行一次。也可以设置输入,当指定位置有数据时才开始执行;设置输出,将数据输出到指定位置。

如果coordinator设定的开始时间比当前时间早的话,会先将开始时间和当前时间之间应该执行的workflow全部执行一遍。

image

参考文献:

Oozie官方文档

Hue官方文档

cloudera community

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 为什么需要任务调度框架 在进行数据处理的时候,需要进行数据采集、数据清洗、数据分析等操作,每一个过程都可能涉及到多...
    心_的方向阅读 6,243评论 1 6
  • 一. Oozie简介 Apache Oozie是用于Hadoop平台的一种工作流调度引擎。 作用 统一调度ha...
    达微阅读 1,822评论 0 3
  • * Oozie部署 (与之前几节内容重复则不再赘述,比如解压,安装之类的) 1、 Hadoop已经成功安装并配置 ...
    浪客剑心_a3b5阅读 1,433评论 0 0
  • 踢得很放松,和踢得很随意。
    leo_s阅读 409评论 2 4
  • 近期关于情商与修养的感悟来源于6月中旬观看的“黄门宴”话剧。 刚开始,看到这个话剧的名字,我以为是介绍某个地方的饮...
    阿砖成长笔记阅读 1,688评论 0 2