Oozie

乌兹天下第一【dog】

各种调度工具特性对比

Ooize 是一个重量级,功能全面

Azkaban 轻量级

linux crontab 最轻量,最简单

Oozie

使用Oozie的主要目的是为了管理不同类型的作业在Hadoop系统中处理。

Oozie基于hadoop集群

原生通过xml配置,很麻烦 ; 建议配合hue使用


安装

安装依赖:tomcat,mysql,hadoop htfs,

  1. 使用tomcat等服务器作为web页面展示容器,

  2. 使用关系型数据库存储Oozie的工作流元数据
    默认使用derby,由于derby的缺点,一般情况使用mysql作为Oozie的元数据库,

  3. 使用extjs来作为报表展示js框架

  4. 在hadoop执行具体任务

img

Oozie Client:提供命令行、java api、rest等方式,对Oozie的工作流流程的提交、启动、运行等操作;

​ 本质上是发HTTP请求向OozieServer提交作业

Oozie Server /Oozie webapp:java web应用

元数据库:定义了action执行的一些状态信息,一般存放在Mysql数据库中

hadoop: Oozie是依赖于HDFS进行调度的,作业的具体执行是放在Hadoop执行的

概念

执行流程

client向 oozie webapp 提交命令,

oozie执行hadoop程序编排流程:

1. 向yarn集群申请 启动一个mr作业**launcher job**,map-only的MR作业
2. 通过launcher job提交、监控 其他各种类型的action任务

img

工作流类型

bundle包含多个coordinator,coordinator包含一个workflow,workflow定义具体的action动作

preload

  • 总体组件图
    Oozie
WorkFlow

最基本的工作流,只能按流程顺序执行

job组成

job.properties :记录了job的属性
workflow.xml :使用hPDL 定义任务的流程和分支
lib目录:用来执行具体的任务的jar包,sh文件等

workflow.xml

有两大类节点构成:

控制流节点(Control flow nodes)
  • start,end,fail,kill

开始节点, 指定的工作流程作业的开始。

结束节点, 作业的结束信号。

错误节点, 指定要打印错误和相应的错误信息的发生。

  • decision,fork,join 控制工作流执行路径

  • 不可以自定义

<workflow-app name="[WF-DEF-NAME]" xlmns="uri:oozie:workflow:0.1">
    <!-- 启动 -->
    <start to="[NODE-NAME]" />
  	
    <!-- 条件判断 选择执行 -->
    <decision name="[NODE-NAME]">
        <switch>
            <case to="[NODE_NAME]">[PREDICATE]</case>
            ...
            <case to="[NODE_NAME]">[PREDICATE]</case>
            <default to="[NODE_NAME]"/>
        </switch>
    </decision>
  
  	<!-- fork和join必须一起使用 -->
    <!-- 并发执行路径 -->
    <fork name="[FORK-NODE-NAME]">
        <path start="[NODE-NAME_1]" />
        ...
        <path start="[NODE-NAME_N]" />
    </fork>
    <!-- fork所有的路径都到达后,才会继续执行join节点 -->
    <join name="[JOIN-NODE-NAME]" to="[NODE-NAME]" />

    <kill name="[NODE-NAME]" />
        <message>[MESSAGE-TO-LOG]</message>
    </kill>
    <end to="[NODE-NAME]" />

</workflow-app>
动作节点(Action nodes)

执行具体动作,支持多种类型的Hadoop作业(如Java map-reduce、流式map-reduce、Pig、Hive、Sqoop和Distcp)以及特定于系统的工作(如Java程序和shell脚本)

  1. 操作节点的执行都是远程的

  2. 异步执行,通过 回调(call backs)或者 轮询(polling)探测状态

  3. 恢复执行的策略(定时重试,人工干预)

  4. 执行成功,则会转向ok节点;失败 则会转向error节点。

  • 可以自定义
		<action name="shell-node">
      	<!-- 执行shell脚本 -->
        <shell xmlns="uri:oozie:shell-action:1.0">
            <!-- 交给yarn执行 -->
            <resource-manager>${resourceManager}</resource-manager>
            <name-node>${nameNode}</name-node>
            <configuration>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
            </configuration>
            <!-- 执行 echo 脚本 -->
            <exec>echo</exec>
            <!-- 执行 echo 脚本的参数 -->
            <argument>my_output=Hello Oozie</argument>
            <capture-output/>
        </shell>
        <!-- 执行结果 -->
        <ok to="check-output"/>
        <error to="fail"/>
    </action>
Coordinator

定时触发WorkFlow

  1. 基于时间【起始时间,结束时间,频率】
  2. 基于数据【有了数据才会触发】
coordinator.xml
<coordinator-app name="cron-coord" frequency="${coord:minutes(10) 频率,支持crontab表达式}" start="${起始时间}" end="${结束时间}" timezone="UTC 时区"
                 xmlns="uri:oozie:coordinator:0.2">
    <action>
        <workflow>
            <app-path>${workflow.xml文件路径}</app-path>
            <configuration>
                <property>
                    <name>resourceManager</name>
                    <value>${resourceManager}</value>
                </property>
                <property>
                    <name>nameNode</name>
                    <value>${nameNode}</value>
                </property>
                <property>
                    <name>queueName</name>
                    <value>${queueName}</value>
                </property>
            </configuration>
        </workflow>
    </action>
</coordinator-app>
Bundle Job

批处理,绑定多个Coordinator

bundle.xml
<bundle-app name='bundle-app' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns='uri:oozie:bundle:0.1'>
          <coordinator name='coord-1'>
                 <app-path>${coordinator.xml路径}</app-path>
                 <configuration>
                     <property>
                         <name>start</name>
                         <value>${start}</value>
                     </property>
                     <property>
                         <name>end</name>
                         <value>${end}</value>
                     </property>
                 </configuration>
          </coordinator>
</bundle-app>

生命周期,Job状态

  1. PREP,一个工作流第一次创建就处于PREP状态,表示工作流已经创建,但是还没有运行。
  2. RUNNIG,当一个已经被创建的工作流job开始执行的时候,就处于RUNNING状态。它不会达到结束状态,只能因为出错而结束或者被挂起。
  3. SUSPENDED,一个RUNNING状态的工作流Job会变成SUSPENDED状态,而且它会一直处于该状态,除非这个工作流Job被重启开始执行或者被杀死。
  4. SUCCESSEDED,当一个RUNNING状态的工作流Job达到了end节点,他就变成了SUCCESSEDED最终完成状态。
  5. KILLED,当一个工作流Job处于被创建后的状态。或者处于RUNNING,SUSPENDED状态时,被杀死,则工作流Job的状态变为了KILLED状态。
  6. FAILED,当一个工作流Job不可预期的错误失败而终止,就会变成FAILED状态。

执行workflow应用程序

工作流应用程序由工作流定义和所有相关资源组成,例如MapReduce Jar文件,Pig脚本等。应用程序需要遵循简单的目录结构并部署到HDFS,以便Oozie可以访问它们。

|- apps	#任务
|  |  shell	# 执行shell脚本
|  |  |- job.properties
|  |  |- workflow.xm
|  |- cron # 定时
|  |  |- coordinator.xml
|  |  |- job.properties
|  |  |- workflow.xml
|  |- bundle # 批处理
|  |  |- bundle.xml
|  |  |- job.properties
|- input-data	#数据源
|- src
job.properties

工作流参数配置

#任务执行路径:hdfs
nameNode=hdfs://localhost:8020
examplesRoot=examples
#oozie资源存储路径
oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/shell

#交给谁调度:yarn
resourceManager=localhost:8032
#mr任务队列名称
queueName=default

hadoop1是 ,hadoop2是

  1. 上传workFlow资源到 oozie.wf.application.path

  2. 执行任务

$ oozie job -oozie http://oozie-server-ip:11000/oozie -config job.properties路径 -run
>返回Job ID
#oozie job -oozie http://172.16.5.32:12000/oozie -config /usr/local/service/oozie/examples/apps/shell/job.properties -run
  1. 查看结果
$ oozie job -info <Job ID>

​ oozie的具体执行提交到了yarn,可以从yarn看具体日志

hue

(Hadoop User Experience)

开源的Apache Hadoop UI系统,统一了各个项目的开发方式放在一个接口里

Hue出自CDH

  • SQL编辑器,支持Hive, Impala, MySQL, Oracle, PostgreSQL, SparkSQL, Solr SQL, Phoenix…
  • 搜索引擎Solr的各种图表
  • Spark和Hadoop的友好界面支持
  • 支持调度系统Apache Oozie,可进行workflow的编辑、查看

img

hue操作oozie

https://cloud.tencent.com/document/product/589/71987#oozie-.E4.BB.BB.E5.8A.A1.E7.9A.84.E5.BC.80.E5.8F.91

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xyc1211

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值