乌兹天下第一【dog】

Ooize 是一个重量级,功能全面
Azkaban 轻量级
linux crontab 最轻量,最简单
使用Oozie的主要目的是为了管理不同类型的作业在Hadoop系统中处理。
Oozie基于hadoop集群
原生通过xml配置,很麻烦 ; 建议配合hue使用
安装依赖:tomcat,mysql,hadoop htfs,
使用tomcat等服务器作为web页面展示容器,
使用关系型数据库存储Oozie的工作流元数据,
默认使用derby,由于derby的缺点,一般情况使用mysql作为Oozie的元数据库,
使用extjs来作为报表展示js框架
在hadoop执行具体任务

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任务

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


最基本的工作流,只能按流程顺序执行
job.properties :记录了job的属性
workflow.xml :使用hPDL 定义任务的流程和分支
lib目录:用来执行具体的任务的jar包,sh文件等
有两大类节点构成:
开始节点, 指定的工作流程作业的开始。
结束节点, 作业的结束信号。
错误节点, 指定要打印错误和相应的错误信息的发生。
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 name="[FORK-NODE-NAME]">
<path start="[NODE-NAME_1]" />
...
<path start="[NODE-NAME_N]" />
fork>
<join name="[JOIN-NODE-NAME]" to="[NODE-NAME]" />
<kill name="[NODE-NAME]" />
<message>[MESSAGE-TO-LOG]message>
kill>
<end to="[NODE-NAME]" />
workflow-app>
执行具体动作,支持多种类型的Hadoop作业(如Java map-reduce、流式map-reduce、Pig、Hive、Sqoop和Distcp)以及特定于系统的工作(如Java程序和shell脚本)
操作节点的执行都是远程的
异步执行,通过 回调(call backs)或者 轮询(polling)探测状态
恢复执行的策略(定时重试,人工干预)
执行成功,则会转向ok节点;失败 则会转向error节点。
<action name="shell-node">
<shell xmlns="uri:oozie:shell-action:1.0">
<resource-manager>${resourceManager}resource-manager>
<name-node>${nameNode}name-node>
<configuration>
<property>
<name>mapred.job.queue.namename>
<value>${queueName}value>
property>
configuration>
<exec>echoexec>
<argument>my_output=Hello Oozieargument>
<capture-output/>
shell>
<ok to="check-output"/>
<error to="fail"/>
action>
定时触发WorkFlow
<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>resourceManagername>
<value>${resourceManager}value>
property>
<property>
<name>nameNodename>
<value>${nameNode}value>
property>
<property>
<name>queueNamename>
<value>${queueName}value>
property>
configuration>
workflow>
action>
coordinator-app>
批处理,绑定多个Coordinator
<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>startname>
<value>${start}value>
property>
<property>
<name>endname>
<value>${end}value>
property>
configuration>
coordinator>
bundle-app>
工作流应用程序由工作流定义和所有相关资源组成,例如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
工作流参数配置
#任务执行路径: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是
上传workFlow资源到 oozie.wf.application.path
执行任务
$ 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
$ oozie job -info <Job ID>
oozie的具体执行提交到了yarn,可以从yarn看具体日志
(Hadoop User Experience)
开源的Apache Hadoop UI系统,统一了各个项目的开发方式放在一个接口里
Hue出自CDH
