Oozie:入门概述

Oozie能做什么(What Oozie Does)

Oozie是一个Java Web应用,用于Apache Hadoop的任务(jobs)调度。Oozie顺序的合并多个任务(jobs)成为一个可工作的逻辑单元。其主要是集成了Hadoop技术栈,包括YARN等,支持Apache MapReduce, Apache Pig, Apache Hive, Apache Sqoop等。Oozie使得用户能够通过Java应用或者Shell脚本的方式调度任务。
Oozie任务有两种基本类型

* Oozie Workflow jobs:这种任务是一个有向无环图(DAG, Direct Acyclical Graph),并按着规则顺序的执行,即上一个Action运行完成后才能运行下一个Action。所以其经常不得不等待。
* Oozie Coordinator jobs:这种任务是重复性的工作流,一般被时间或者数据达到可用会被触发。

Oozie Bundle提供一个复合的方式,将多个Workflow jobs和Coordinator jobs打包合并在一起并能对它们的生命周期进行管理。

Oozie如何工作(How Oozie works)

一个Oozie Workflow是一系列编排成有向无环图(DAG)的Action集合。控制节点定义job时间,设置开始和结束workflow的规则(rules)。这样,Oozie通过decision,fork和join节点控制工作流的执行路径。Action节点触发任务的执行。
Oozie触发工作流的action操作,实际上由Hadoop MapReduce去执行。Oozie利用Hadoop技术栈来均衡负载和处理失败。
Oozie通过回调(callback)和轮询(polling)来检测任务的是否完成。当Oozie开始一个任务(task),它的提供了一个唯一的可以回调的HTTP URL,当这个任务完成的时候就通知这个URL。如果任务失败就调用回调URL,Oozie可以设置任务完成。
经常有这种需求,在规则的时间间隔内运行Oozie workflow,处理那些无法预期的有效数据或者时间。在这些情况下,Oozie Coordinator允许你根据、时间或者事件的条件对工作流触发的时机进行建模。在这些条件得到满足之后,工作流任务就就开始启动。
Oozie Coordinator也可以管理多个工作流,是依赖于子工作流的输出结果。子工作流程的输出将会成为下一个工作流的输入。这条链被称为“数据应用管道”(data application pipeline)。

工作流定义

定义一个Oozie工作流,两个配置文件是必须的,job.properties和workflow.xml。
job.properties的环境变量如下:
nameNode hdfs://mycluster:8020 HDFS地址
jobTracker localhost:8034 jobTracker地址
queueName default Oozie队列
examplesRoot examples 全局目录
oozie.usr.system.libpath true 是否加载用户的lib库
oozie.libpath share/lib/user 用户lib库
oozie.wf.application.path ${nameNode}/user/${user.name}/ Oozie流程所在的HDFS地址

workflow.xml示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

<workflow-app xmlns="uri:oozie:workflow:0.2" name="map-reduce-wf">
<start to="mr-node"/>
<action name="mr-node">
<map-reduce>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<prepare>
<delete path="${nameNode}/user/${wf:user()}/${examplesRoot}/output-data/${outputDir}"/>
</prepare>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
<property>
<name>mapred.mapper.class</name>
<value>org.apache.oozie.example.SampleMapper</value>
</property>
<property>
<name>mapred.reducer.class</name>
<value>org.apache.oozie.example.SampleReducer</value>
</property>
<property>
<name>mapred.map.tasks</name>
<value>1</value>
</property>
<property>
<name>mapred.input.dir</name>
<value>/user/${wf:user()}/${examplesRoot}/input-data/text</value>
</property>
<property>
<name>mapred.output.dir</name>
<value>/user/${wf:user()}/${examplesRoot}/output-data/${outputDir}</value>
</property>
</configuration>
</map-reduce>
<ok to="end"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>

实战命令

上传example目录到hdfs用户oozie根目录(/user/oozie)下:

1
2
3
su - oozie
cd /usr/hdp/current/oozie-server/doc
hdfs dfs -put example example

启动任务命令:

1
oozie job -oozie http://localhost:11000/oozie -config examples/apps/map-reduce/job.properties -run

停止任务命令:

1
oozie job -oozie http://localhost:11000/oozie -kill 0000002-150914143759473-oozie-oozi-W

Oozie Web UI效果图:

这是一张图片
这是一张图片
这是一张图片

参考:
http://hortonworks.com/hadoop/oozie/
http://oozie.apache.org/
http://hortonworks.com/hadoop/oozie/#blog
http://hortonworks.com/hadoop/oozie/#forums
http://hortonworks.com/blog/introducing-availability-of-hdp-2-3-part-3/
https://github.com/yahoo/oozie
书籍:
《Apache Oozie: The Workflow Scheduler for Hadoop》
http://book.douban.com/subject/26348732/