大数据辅助系统工具Oozie
目录
1 Apache Oozie简介
-
Apache oozie
- 是一个工作流调度软件 本身属于cloudera 后来贡献给了apache
- oozie目的根据一个定义DAG(有向无环图)执行工作流程
- oozie本身的配置是一种xml格式的配置文件 oozie跟hue配合使用将会很方便
- oozie特点:顺序执行 周期重复定时 可视化 追踪结果
-
Apache Oozie
-
Oozie client:主要是提供一种方式给用户进行工作流的提交启动(cli javaapi rest)
-
Oozie server(本身是一个java web应用)
-
Hadoop生态圈
-
oozie各种类型任务提交底层依赖于mr程序 首先启动一个没有reducetak的mr 通过这个mr
把各个不同类型的任务提交到具体的集群上执行
-
-
-
oozie 流程节点
-
oozie 核心配置是在一个workflow.xml文件 文件中顶一个工作流的执行流程规则
-
类型
- control node 控制工作流的执行路径:start end fork join kill
- action node 具体的任务类型:mr spark shell java hive
上述两种类型结合起来 就可以描绘出一个工作流的DAG图。
-
-
oozie工作流类型
- workflow 基本类型的工作流 只会按照定义顺序执行 无定时触发
- coordinator 定时触发任务 当满足执行时间 或者输入数据可用 触发workflow执行
- bundle 批处理任务 一次提交多个coordinator
-
Apache oozie 安装
-
版本问题:Apache官方提供的是源码包 需要自己结合hadoop生态圈软件环境进行编译 兼容性问题特别难以处理 因此可以使用第三方商业公司编译好 Cloudera(CDH)
-
修改hadoop的相关配置 启动服务
- httpfs
- jobhistory
配置修改之后需要重启hadoop集群
-
解压oozie安装包 拷贝相关依赖的软件
-
修改oozie-site.xml 主要是mysql相关信息 hadoop配置文件
-
初始化mysql 创建库表
-
生成执行需要的war包
-
-
oozie 实战
- 解压出官方自带的案例 里面封装了各种类型任务的配置模板
- 优化更新hadoop环境资源配置
- yarn资源相关的 申请资源的上下限 yarn调度策略(fair 多线程执行模式)
- mapreduce申请资源相关的 maptask reducetask申请内存的大小
- scp给其他机器 重启集群 (hadoop ) oozie
-
oozie 调度流程
-
根据官方自带的示例编写配置文件
job.properties workflow.xml
-
把任务配置信息连同依赖的资源一起上传到hdfs指定的路径 这个路径在配置中有
-
利用oozie的命令进行提交
-
-
oozie调度hive脚本
-
首先必须保证hiveserve2服务是启动正常的,如果配置metastore服务,要首先启动metastore
nohup /export/servers/hive/bin/hive --service metastore & nohup /export/servers/hive/bin/hive --service hiveserver2 &
-
-
oozie调度mapreduce程序
- 需要在workflow.xml中开启使用新版的 api hadoop2.x
-
oozie调度串联任务
通过action节点 成功失败控制执行的流程
如果上一个action成功 跳转到下一个action 这样就可以变成首尾相连的串联任务
-
oozie基于时间的定时
主要是需要coordinator来配合workflow进行周期性的触发执行
需要注意时间的格式问题 时区的问题
2 Apache Oozie使用
1. Oozie 概述
Oozie 是一个用来管理 Hadoop 生态圈 job 的工作流调度系统。由 Cloudera
公司贡献给 Apache。Oozie 是运行于 Java servlet 容器上的一个 java web 应
用。Oozie 的目的是按照 DAG(有向无环图)调度一系列的 Map/Reduce 或者 Hive
等任务。Oozie 工作流由 hPDL(Hadoop Process Definition Language)定义
(这是一种 XML 流程定义语言)。适用场景包括:
需要按顺序进行一系列任务;
需要并行处理的任务;
需要定时、周期触发的任务;
可视化作业流运行过程;
运行结果或异常的通报。
2. Oozie 的架构
Oozie Client:提供命令行、java api、rest 等方式,对 Oozie 的工作流
流程的提交、启动、运行等操作;
Oozie WebApp:即 Oozie Server,本质是一个 java 应用。可以使用内置的
web 容器,也可以使用外置的 web 容器;
Hadoop Cluster:底层执行 Oozie 编排流程的各个 hadoop 生态圈组件;
3. Oozie 基本原理
Oozie 对工作流的编排,是基于 workflow.xml 文件来完成的。用户预先将工
作流执行规则定制于 workflow.xml 文件中,并在 job.properties 配置相关的参数,
然后由 Oozie Server 向 MR 提交 job 来启动工作流。
3.1. 流程节点
工作流由两种类型的节点组成,分别是:
Control Flow Nodes:控制工作流执行路径,包括 start,end,kill,decision,
fork,join。
Action Nodes:决定每个操作执行的任务类型,包括 MapReduce、java、hive、
shell 等。
4. Oozie 工作流类型
4.1. WorkFlow
规则相对简单,不涉及定时、批处理的工作流。顺序执行流程节点。
Workflow 有个大缺点:没有定时和条件触发功能。
4.2. Coordinator
Coordinator 将多个工作流 Job 组织起来,称为 Coordinator Job,并指定触发
时间和频率,还可以配置数据集、并发数等,类似于在工作流外部增加了一个协
调器来管理这些工作流的工作流 Job 的运行。
4.3. Bundle
针对 coordinator 的批处理工作流。Bundle 将多个 Coordinator 管理起来,这
样我们只需要一个 Bundle 提交即可。
3 Apache Oozie 安装
1. 修改 hadoop 相关配置
1.1. 配置 httpfs 服务
修改 hadoop 的配置文件 core-site.xml
hadoop.proxyuser.root.hosts
hadoop.proxyuser.root.groups
hadoop.proxyuser.root.hosts 允许通过 httpfs 方式访问 hdfs 的主机名、域
名;
hadoop.proxyuser.root.groups 允许访问的客户端的用户组
1.2. 配置 jobhistory 服务
修改 hadoop 的配置文件 mapred-site.xml
mapreduce.jobhistory.address
node-1:10020
MapReduce JobHistory Server IPC host:port
mapreduce.jobhistory.webapp.address
node-1:19888
MapReduce JobHistory Server Web UI host:port
2. 上传 oozie 的安装包并解压
oozie 的安装包上传到/export/softwares
tar -zxvf oozie-4.1.0-cdh5.14.0.tar.gz
解压 hadooplibs 到与 oozie 平行的目录
cd /export/servers/oozie-4.1.0-cdh5.14.0
tar -zxvf oozie-hadooplibs-4.1.0-cdh5.14.0.tar.gz -C …/
3. 添加相关依赖
oozie 的安装路径下创建 libext 目录
cd /export/servers/oozie-4.1.0-cdh5.14.0
mkdir -p libext
拷贝 hadoop 依赖包到 libext
cd /export/servers/oozie-4.1.0-cdh5.14.0
cp -ra hadooplibs/hadooplib-2.6.0-cdh5.14.0.oozie-4.1.0-
cdh5.14.0/* libext/
上传 mysql 的驱动包到 libext
mysql-connector-java-5.1.32.jar
添加 ext-2.2.zip 压缩包到 libext
ext-2.2.zip
4. 修改 oozie-site.xml
cd /export/servers/oozie-4.1.0-cdh5.14.0/conf
vim oozie-site.xml
oozie 默认使用的是 UTC 的时区,需要在 oozie-site.xml 当中配置时区为
GMT+0800 时区
oozie.service.JPAService.jdbc.driver
com.mysql.jdbc.Driver
oozie.service.JPAService.jdbc.url
jdbc:mysql://node-1:3306/oozie
oozie.service.JPAService.jdbc.username
root
oozie.service.JPAService.jdbc.password
hadoop
oozie.processing.timezone
GMT+0800
oozie.service.coord.check.maximum.frequency
false
oozie.service.HadoopAccessorService.hadoop.configurations
*=/export/servers/hadoop-2.7.5/etc/hadoop
5. 初始化 mysql 相关信息
上传 oozie 的解压后目录的下的 yarn.tar.gz 到 hdfs 目录
bin/oozie-setup.sh sharelib create -fs hdfs://node-1:9000 -
locallib oozie-sharelib-4.1.0-cdh5.14.0-yarn.tar.gz
本质上就是将这些 jar 包解压到了 hdfs 上面的路径下面去
创建 mysql 数据库
mysql -uroot -p
create database oozie;
初始化创建 oozie 的数据库表
cd /export/servers/oozie-4.1.0-cdh5.14.0
bin/oozie-setup.sh db create -run -sqlfile oozie.sql
6. 打包项目,生成 war 包
cd /export/servers/oozie-4.1.0-cdh5.14.0
bin/oozie-setup.sh prepare-war
7. 配置 oozie 环境变量
vim /etc/profile
export OOZIE_HOME=/export/servers/oozie-4.1.0-cdh5.14.0
export OOZIE_URL=http://node03.hadoop.com:11000/oozie
export PATH=
P
A
T
H
:
PATH:
PATH:OOZIE_HOME/bin
source /etc/profile
8. 启动关闭 oozie 服务
启动命令
cd /export/servers/oozie-4.1.0-cdh5.14.0
bin/oozied.sh start
关闭命令
bin/oozied.sh stop
启动的时候产生的 pid 文件,如果是 kill 方式关闭进程 则需要删除该文件
重新启动,否则再次启动会报错。
9. 浏览器 web UI 页面
http://node-1:11000/oozie/
10. 解决 oozie 页面时区显示异常
页面访问的时候,发现 oozie 使用的还是 GMT 的时区,与我们现在的时区
相差一定的时间,所以需要调整一个 js 的获取时区的方法,将其改成我们现在的
时区。
修改 js 当中的时区问题
cd oozie-server/webapps/oozie
vim oozie-console.js
function getTimeZone() {
Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
return Ext.state.Manager.get(“TimezoneId”,“GMT+0800”);
}
重启 oozie 即可
cd /export/servers/oozie-4.1.0-cdh5.14.0
bin/oozied.sh stop
bin/oozied.sh start
4 Apache Oozie 实战
oozie 安装好了之后,需要测试 oozie 的功能是否完整好使,官方已经给自带
带了各种测试案例,可以通过官方提供的各种案例来学习 oozie 的使用,后续也
可以把这些案例作为模板在企业实际中使用。
先把官方提供的各种案例给解压出来
cd /export/servers/oozie-4.1.0-cdh5.14.0
tar -zxvf oozie-examples.tar.gz
创建统一的工作目录,便于集中管理 oozie。企业中可任意指定路径。这里
直接在 oozie 的安装目录下面创建工作目录
cd /export/servers/oozie-4.1.0-cdh5.14.0
mkdir oozie_works
1. 优化更新 hadoop 相关配置
1.1. yarn 容器资源分配属性
yarn-site.xml:
<!—节点最大可用内存,结合实际物理内存调整 -->
yarn.nodemanager.resource.memory-mb
3072
<!—每个容器可以申请内存资源的最小值,最大值 -->
yarn.scheduler.minimum-allocation-mb
1024
yarn.scheduler.maximum-allocation-mb
3072
<!—修改为 Fair 公平调度,动态调整资源,避免 yarn 上任务等待(多线程执行) -->
yarn.resourcemanager.scheduler.class
org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler
<!—Fair 调度时候是否开启抢占功能 -->
yarn.scheduler.fair.preemption
true
<!—超过多少开始抢占,默认 0.8–>
yarn.scheduler.fair.preemption.cluster-utilization-threshold
1.0
1.2. mapreduce 资源申请配置
设置 mapreduce.map.memory.mb 和 mapreduce.reduce.memory.mb 配置
否则 Oozie 读取的默认配置 -1, 提交给 yarn 的时候会抛异常 Invalid resource
request, requested memory < 0, or requested memory > max configured,
requestedMemory=-1, maxMemory=8192
mapred-site.xml
<!—单个 maptask、reducetask 可申请内存大小 -->
mapreduce.map.memory.mb
1024
mapreduce.reduce.memory.mb
1024
1.3. 更新 hadoop 配置重启集群
重启 hadoop 集群
重启 oozie 服务
2. Oozie 调度 shell 脚本
2.1. 准备配置模板
把 shell 的任务模板拷贝到 oozie 的工作目录当中去
cd /export/servers/oozie-4.1.0-cdh5.14.0
cp -r examples/apps/shell/ oozie_works/
准备待调度的 shell 脚本文件
cd /export/servers/oozie-4.1.0-cdh5.14.0
vim oozie_works/shell/hello.sh
注意:这个脚本一定要是在我们 oozie 工作路径下的 shell 路径下的位置
#!/bin/bash
echo “hello world” >> /export/servers/hello_oozie.txt
2.2. 修改配置模板
修改 job.properties
cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works/shell
vim job.properties
nameNode=hdfs://node-1:8020
jobTracker=node-1:8032
queueName=default
examplesRoot=oozie_works
oozie.wf.application.path=
n
a
m
e
N
o
d
e
/
u
s
e
r
/
{nameNode}/user/
nameNode/user/{user.name}/${examplesRoot}/shell
EXEC=hello.sh
jobTracker:在 hadoop2 当中,jobTracker 这种角色已经没有了,只有
resourceManager,这里给定 resourceManager 的 IP 及端口即可。
queueName:提交 mr 任务的队列名;
examplesRoot:指定 oozie 的工作目录;
oozie.wf.application.path:指定 oozie 调度资源存储于 hdfs 的工作路径;
EXEC:指定执行任务的名称。
修改 workflow.xml
j
o
b
T
r
a
c
k
e
r
<
/
j
o
b
−
t
r
a
c
k
e
r
>
<
n
a
m
e
−
n
o
d
e
>
{jobTracker}</job-tracker> <name-node>
jobTracker</job−tracker><name−node>{nameNode}
mapred.job.queue.name
q
u
e
u
e
N
a
m
e
<
/
v
a
l
u
e
>
<
/
p
r
o
p
e
r
t
y
>
<
/
c
o
n
f
i
g
u
r
a
t
i
o
n
>
<
e
x
e
c
>
{queueName}</value> </property> </configuration> <exec>
queueName</value></property></configuration><exec>{EXEC}
/user/root/oozie_works/shell/KaTeX parse error: Expected 'EOF', got '#' at position 7: {EXEC}#̲{EXEC}
w
f
:
a
c
t
i
o
n
D
a
t
a
(
′
s
h
e
l
l
−
n
o
d
e
′
)
[
′
m
y
o
u
t
p
u
t
′
]
e
q
′
H
e
l
l
o
O
o
z
i
e
′
<
/
c
a
s
e
>
<
d
e
f
a
u
l
t
t
o
=
"
f
a
i
l
−
o
u
t
p
u
t
"
/
>
<
/
s
w
i
t
c
h
>
<
/
d
e
c
i
s
i
o
n
>
<
k
i
l
l
n
a
m
e
=
"
f
a
i
l
"
>
<
m
e
s
s
a
g
e
>
S
h
e
l
l
a
c
t
i
o
n
f
a
i
l
e
d
,
e
r
r
o
r
m
e
s
s
a
g
e
[
{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:actionData(′shell−node′)[′myoutput′]eq′HelloOozie′</case><defaultto="fail−output"/></switch></decision><killname="fail"><message>Shellactionfailed,errormessage[{wf:errorMessage(wf:lastErrorNode())}]
Incorrect output, expected [Hello Oozie] but was [${wf:actionData(‘shellnode’)[‘my_output’]}]
2.3. 上传调度任务到 hdfs
注意:上传的 hdfs 目录为/user/root,因为 hadoop 启动的时候使用的是 root
用户,如果 hadoop 启动的是其他用户,那么就上传到/user/其他用户
cd /export/servers/oozie-4.1.0-cdh5.14.0
hdfs dfs -put oozie_works/ /user/root
2.4. 执行调度任务
通过 oozie 的命令来执行调度任务
cd /export/servers/oozie-4.1.0-cdh5.14.0
bin/oozie job -oozie http://node-1:11000/oozie -config
oozie_works/shell/job.properties -run
从监控界面可以看到任务执行成功了。
可以通过 jobhistory 来确定调度时候是由那台机器执行的。
3. Oozie 调度 Hive
3.1. 准备配置模板
cd /export/servers/oozie-4.1.0-cdh5.14.0
cp -ra examples/apps/hive2/ oozie_works/
3.2. 修改配置模板
修改 job.properties
cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works/hive2
vim job.properties
nameNode=hdfs://node-1:8020
jobTracker=node-1:8032
queueName=default
jdbcURL=jdbc:hive2://node-1:10000/default
examplesRoot=oozie_works
oozie.use.system.libpath=true
# 配 置 我 们 文 件 上 传 到 hdfs 的 保 存 路 径 实 际 上 就 是 在 hdfs 的
/user/root/oozie_works/hive2
这个路径下
oozie.wf.application.path=
n
a
m
e
N
o
d
e
/
u
s
e
r
/
{nameNode}/user/
nameNode/user/{user.name}/${examplesRoot}/hive2
修改 workflow.xml(实际上无修改)
3.4. 执行调度任务
首先确保已经启动 hiveServer2 服务。
cd /export/servers/oozie-4.1.0-cdh5.14.0
bin/oozie job -oozie http://node-1:11000/oozie -config
oozie_works/hive2/job.properties -run
可以在 yarn 上看到调度执行的过程:
4. Oozie 调度 MapReduce
4.1. 准备配置模板
准备 mr 程序的待处理数据。用 hadoop 自带的 MR 程序来运行 wordcount。
准备数据上传到 HDFS 的/oozie/input 路径下去
hdfs dfs -mkdir -p /oozie/input
hdfs dfs -put wordcount.txt /oozie/input
拷贝 MR 的任务模板
cd /export/servers/oozie-4.1.0-cdh5.14.0
cp -ra examples/apps/map-reduce/ oozie_works/
删掉 MR 任务模板 lib 目录下自带的 jar 包
cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works/mapreduce/lib
rm -rf oozie-examples-4.1.0-cdh5.14.0.jar
拷贝官方自带 mr 程序 jar 包到对应目录
cp
/export/servers/hadoop-2.7.5/share/hadoop/mapreduce/hadoopmapreduce-examples-2.7.5.jar
/export/servers/oozie-4.1.0-cdh5.14.0/oozie_works/mapreduce/lib/
4.2. 修改配置模板
修改 job.properties
cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works/mapreduce
vim job.properties
nameNode=hdfs://node-1:8020
jobTracker=node-1:8032
queueName=default
examplesRoot=oozie_works
oozie.wf.application.path=
n
a
m
e
N
o
d
e
/
u
s
e
r
/
{nameNode}/user/
nameNode/user/{user.name}/${examplesRoot}/mapreduce/workflow.xml
outputDir=/oozie/output
inputdir=/oozie/input
修改 workflow.xml
cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works/mapreduce
vim workflow.xml
mapreduce.job.output.key.class
org.apache.hadoop.io.Text
org.apache.hadoop.examples.WordCount$TokenizerMapper
org.apache.hadoop.examples.WordCount$IntSumReducer
1
Map/Reduce failed, error
message[
w
f
:
e
r
r
o
r
M
e
s
s
a
g
e
(
w
f
:
l
a
s
t
E
r
r
o
r
N
o
d
e
(
)
)
]
<
/
m
e
s
s
a
g
e
>
<
/
k
i
l
l
>
<
e
n
d
n
a
m
e
=
"
e
n
d
"
/
>
<
/
w
o
r
k
f
l
o
w
−
a
p
p
>
4.3
.
上
传
调
度
任
务
到
h
d
f
s
c
d
/
e
x
p
o
r
t
/
s
e
r
v
e
r
s
/
o
o
z
i
e
−
4.1.0
−
c
d
h
5.14.0
/
o
o
z
i
e
w
o
r
k
s
h
d
f
s
d
f
s
−
p
u
t
m
a
p
−
r
e
d
u
c
e
/
/
u
s
e
r
/
r
o
o
t
/
o
o
z
i
e
w
o
r
k
s
/
4.4
.
执
行
调
度
任
务
c
d
/
e
x
p
o
r
t
/
s
e
r
v
e
r
s
/
o
o
z
i
e
−
4.1.0
−
c
d
h
5.14.0
b
i
n
/
o
o
z
i
e
j
o
b
−
o
o
z
i
e
h
t
t
p
:
/
/
n
o
d
e
−
1
:
11000
/
o
o
z
i
e
−
c
o
n
f
i
g
o
o
z
i
e
w
o
r
k
s
/
m
a
p
−
r
e
d
u
c
e
/
j
o
b
.
p
r
o
p
e
r
t
i
e
s
–
r
u
n
5
.
O
o
z
i
e
任
务
串
联
在
实
际
工
作
当
中
,
肯
定
会
存
在
多
个
任
务
需
要
执
行
,
并
且
存
在
上
一
个
任
务
的
输
出
结
果
作
为
下
一
个
任
务
的
输
入
数
据
这
样
的
情
况
,
所
以
我
们
需
要
在
w
o
r
k
f
l
o
w
.
x
m
l
配
置
文
件
当
中
配
置
多
个
a
c
t
i
o
n
,
实
现
多
个
任
务
之
间
的
相
互
依
赖
关
系
。
需
求
:
首
先
执
行
一
个
s
h
e
l
l
脚
本
,
执
行
完
了
之
后
再
执
行
一
个
M
R
的
程
序
,
最
后
再
执
行
一
个
h
i
v
e
的
程
序
。
5.1
.
准
备
工
作
目
录
c
d
/
e
x
p
o
r
t
/
s
e
r
v
e
r
s
/
o
o
z
i
e
−
4.1.0
−
c
d
h
5.14.0
/
o
o
z
i
e
w
o
r
k
s
m
k
d
i
r
−
p
s
e
r
e
v
a
l
−
a
c
t
i
o
n
s
5.2
.
准
备
调
度
文
件
将
之
前
的
h
i
v
e
,
s
h
e
l
l
,
M
R
的
执
行
,
进
行
串
联
成
到
一
个
w
o
r
k
f
l
o
w
当
中
。
c
d
/
e
x
p
o
r
t
/
s
e
r
v
e
r
s
/
o
o
z
i
e
−
4.1.0
−
c
d
h
5.14.0
/
o
o
z
i
e
w
o
r
k
s
c
p
h
i
v
e
2
/
s
c
r
i
p
t
.
q
s
e
r
e
v
a
l
−
a
c
t
i
o
n
s
/
c
p
s
h
e
l
l
/
h
e
l
l
o
.
s
h
s
e
r
e
v
a
l
−
a
c
t
i
o
n
s
/
c
p
−
r
a
m
a
p
−
r
e
d
u
c
e
/
l
i
b
s
e
r
e
v
a
l
−
a
c
t
i
o
n
s
/
5.3
.
修
改
配
置
模
板
c
d
/
e
x
p
o
r
t
/
s
e
r
v
e
r
s
/
o
o
z
i
e
−
4.1.0
−
c
d
h
5.14.0
/
o
o
z
i
e
w
o
r
k
s
/
s
e
r
e
v
a
l
−
a
c
t
i
o
n
s
v
i
m
w
o
r
k
f
l
o
w
.
x
m
l
<
w
o
r
k
f
l
o
w
−
a
p
p
x
m
l
n
s
=
"
u
r
i
:
o
o
z
i
e
:
w
o
r
k
f
l
o
w
:
0.4
"
n
a
m
e
=
"
s
h
e
l
l
−
w
f
"
>
<
s
t
a
r
t
t
o
=
"
s
h
e
l
l
−
n
o
d
e
"
/
>
<
a
c
t
i
o
n
n
a
m
e
=
"
s
h
e
l
l
−
n
o
d
e
"
>
<
s
h
e
l
l
x
m
l
n
s
=
"
u
r
i
:
o
o
z
i
e
:
s
h
e
l
l
−
a
c
t
i
o
n
:
0.2
"
>
<
j
o
b
−
t
r
a
c
k
e
r
>
{wf:errorMessage(wf:lastErrorNode())}]</message> </kill> <end name="end"/> </workflow-app> 4.3. 上传调度任务到 hdfs cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works hdfs dfs -put map-reduce/ /user/root/oozie_works/ 4.4. 执行调度任务 cd /export/servers/oozie-4.1.0-cdh5.14.0 bin/oozie job -oozie http://node-1:11000/oozie -config oozie_works/map-reduce/job.properties –run 5. Oozie 任务串联 在实际工作当中,肯定会存在多个任务需要执行,并且存在上一个任务的输 出结果作为下一个任务的输入数据这样的情况,所以我们需要在 workflow.xml 配 置文件当中配置多个 action,实现多个任务之间的相互依赖关系。 需求:首先执行一个 shell 脚本,执行完了之后再执行一个 MR 的程序,最 后再执行一个 hive 的程序。 5.1. 准备工作目录 cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works mkdir -p sereval-actions 5.2. 准备调度文件 将之前的 hive,shell, MR 的执行,进行串联成到一个 workflow 当中。 cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works cp hive2/script.q sereval-actions/ cp shell/hello.sh sereval-actions/ cp -ra map-reduce/lib sereval-actions/ 5.3. 修改配置模板 cd /export/servers/oozie-4.1.0- cdh5.14.0/oozie_works/sereval-actions vim 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>
wf:errorMessage(wf:lastErrorNode())]</message></kill><endname="end"/></workflow−app>4.3.上传调度任务到hdfscd/export/servers/oozie−4.1.0−cdh5.14.0/oozieworkshdfsdfs−putmap−reduce//user/root/oozieworks/4.4.执行调度任务cd/export/servers/oozie−4.1.0−cdh5.14.0bin/ooziejob−ooziehttp://node−1:11000/oozie−configoozieworks/map−reduce/job.properties–run5.Oozie任务串联在实际工作当中,肯定会存在多个任务需要执行,并且存在上一个任务的输出结果作为下一个任务的输入数据这样的情况,所以我们需要在workflow.xml配置文件当中配置多个action,实现多个任务之间的相互依赖关系。需求:首先执行一个shell脚本,执行完了之后再执行一个MR的程序,最后再执行一个hive的程序。5.1.准备工作目录cd/export/servers/oozie−4.1.0−cdh5.14.0/oozieworksmkdir−psereval−actions5.2.准备调度文件将之前的hive,shell,MR的执行,进行串联成到一个workflow当中。cd/export/servers/oozie−4.1.0−cdh5.14.0/oozieworkscphive2/script.qsereval−actions/cpshell/hello.shsereval−actions/cp−ramap−reduce/libsereval−actions/5.3.修改配置模板cd/export/servers/oozie−4.1.0−cdh5.14.0/oozieworks/sereval−actionsvimworkflow.xml<workflow−appxmlns="uri:oozie:workflow:0.4"name="shell−wf"><startto="shell−node"/><actionname="shell−node"><shellxmlns="uri:oozie:shell−action:0.2"><job−tracker>{jobTracker}
${nameNode}
mapred.job.queue.name
q
u
e
u
e
N
a
m
e
<
/
v
a
l
u
e
>
<
/
p
r
o
p
e
r
t
y
>
<
/
c
o
n
f
i
g
u
r
a
t
i
o
n
>
<
e
x
e
c
>
{queueName}</value> </property> </configuration> <exec>
queueName</value></property></configuration><exec>{EXEC}
/user/root/oozie_works/sereval-actions/KaTeX parse error: Expected 'EOF', got '#' at position 7: {EXEC}#̲{EXEC}
j
o
b
T
r
a
c
k
e
r
<
/
j
o
b
−
t
r
a
c
k
e
r
>
<
n
a
m
e
−
n
o
d
e
>
{jobTracker}</job-tracker> <name-node>
jobTracker</job−tracker><name−node>{nameNode}
mapred.job.queue.name
${queueName}
mapred.input.dir
n
a
m
e
N
o
d
e
/
{nameNode}/
nameNode/{inputdir}
org.apache.hadoop.examples.WordCount$TokenizerMapper
org.apache.hadoop.examples.WordCount$IntSumReducer
message[
w
f
:
e
r
r
o
r
M
e
s
s
a
g
e
(
w
f
:
l
a
s
t
E
r
r
o
r
N
o
d
e
(
)
)
]
<
/
m
e
s
s
a
g
e
>
<
/
k
i
l
l
>
<
k
i
l
l
n
a
m
e
=
"
f
a
i
l
−
o
u
t
p
u
t
"
>
<
m
e
s
s
a
g
e
>
I
n
c
o
r
r
e
c
t
o
u
t
p
u
t
,
e
x
p
e
c
t
e
d
[
H
e
l
l
o
O
o
z
i
e
]
b
u
t
w
a
s
[
{wf:errorMessage(wf:lastErrorNode())}]</message> </kill> <kill name="fail-output"> <message>Incorrect output, expected [Hello Oozie] but was [
wf:errorMessage(wf:lastErrorNode())]</message></kill><killname="fail−output"><message>Incorrectoutput,expected[HelloOozie]butwas[{wf:actionData(‘shellnode’)[‘my_output’]}]
job.properties 配置文件
nameNode=hdfs://node-1:8020
jobTracker=node-1:8032
queueName=default
examplesRoot=oozie_works
EXEC=hello.sh
outputDir=/oozie/output
inputdir=/oozie/input
jdbcURL=jdbc:hive2://node-1:10000/default
oozie.use.system.libpath=true
# 配 置 我 们 文 件 上 传 到 hdfs 的 保 存 路 径 实 际 上 就 是 在 hdfs 的
/user/root/oozie_works/sereval-actions 这个路径下
oozie.wf.application.path=
n
a
m
e
N
o
d
e
/
u
s
e
r
/
{nameNode}/user/
nameNode/user/{user.name}/${examplesRoot}/serevalactions/workflow.xml
5.4. 上传调度任务到 hdfs
cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works/
hdfs dfs -put sereval-actions/ /user/root/oozie_works/
5.5. 执行调度任务
cd /export/servers/oozie-4.1.0-cdh5.14.0/
bin/oozie job -oozie http://node-1:11000/oozie -config
oozie_works/sereval-actions/job.properties -run
6. Oozie 定时调度
在 oozie 当中,主要是通过 Coordinator 来实现任务的定时调度,Coordinator
模块主要通过 xml 来进行配置即可。
Coordinator 的调度主要可以有两种实现方式
第一种:基于时间的定时任务调度:
oozie 基于时间的调度主要需要指定三个参数,第一个起始时间,第二个结
束时间,第三个调度频率;
第二种:基于数据的任务调度, 这种是基于数据的调度,只要在有了数据
才会触发调度任务。
6.1. 准备配置模板
第一步:拷贝定时任务的调度模板
cd /export/servers/oozie-4.1.0-cdh5.14.0
cp -r examples/apps/cron oozie_works/cron-job
第二步:拷贝我们的 hello.sh 脚本
cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works
cp shell/hello.sh cron-job/
6.2. 修改配置模板
修改 job.properties
cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works/cronjob
vim job.properties
nameNode=hdfs://node-1:8020
jobTracker=node-1:8032
queueName=default
examplesRoot=oozie_works
oozie.coord.application.path=
n
a
m
e
N
o
d
e
/
u
s
e
r
/
{nameNode}/user/
nameNode/user/{user.name}/${examplesRoot}/cron-
job/coordinator.xml
#start:必须设置为未来时间,否则任务失败
start=2019-05-22T19:20+0800
end=2019-08-22T19:20+0800
EXEC=hello.sh
workflowAppUri=
n
a
m
e
N
o
d
e
/
u
s
e
r
/
{nameNode}/user/
nameNode/user/{user.name}/${examplesRoot}/cronjob/workflow.xml
修改 coordinator.xml
vim coordinator.xml
w
o
r
k
f
l
o
w
A
p
p
U
r
i
<
/
a
p
p
−
p
a
t
h
>
<
c
o
n
f
i
g
u
r
a
t
i
o
n
>
<
p
r
o
p
e
r
t
y
>
<
n
a
m
e
>
j
o
b
T
r
a
c
k
e
r
<
/
n
a
m
e
>
<
v
a
l
u
e
>
{workflowAppUri}</app-path> <configuration> <property> <name>jobTracker</name> <value>
workflowAppUri</app−path><configuration><property><name>jobTracker</name><value>{jobTracker}
nameNode
n
a
m
e
N
o
d
e
<
/
v
a
l
u
e
>
<
/
p
r
o
p
e
r
t
y
>
<
p
r
o
p
e
r
t
y
>
<
n
a
m
e
>
q
u
e
u
e
N
a
m
e
<
/
n
a
m
e
>
<
v
a
l
u
e
>
{nameNode}</value> </property> <property> <name>queueName</name> <value>
nameNode</value></property><property><name>queueName</name><value>{queueName}
修改 workflow.xml
vim workflow.xml
j
o
b
T
r
a
c
k
e
r
<
/
j
o
b
−
t
r
a
c
k
e
r
>
<
n
a
m
e
−
n
o
d
e
>
{jobTracker}</job-tracker> <name-node>
jobTracker</job−tracker><name−node>{nameNode}
mapred.job.queue.name
q
u
e
u
e
N
a
m
e
<
/
v
a
l
u
e
>
<
/
p
r
o
p
e
r
t
y
>
<
/
c
o
n
f
i
g
u
r
a
t
i
o
n
>
<
e
x
e
c
>
{queueName}</value> </property> </configuration> <exec>
queueName</value></property></configuration><exec>{EXEC}
/user/root/oozie_works/cron-job/KaTeX parse error: Expected 'EOF', got '#' at position 7: {EXEC}#̲{EXEC}
6.3. 上传调度任务到 hdfs
cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works
hdfs dfs -put cron-job/ /user/root/oozie_works/
6.4. 执行调度
cd /export/servers/oozie-4.1.0-cdh5.14.0
bin/oozie job -oozie http://node-1:11000/oozie -config
oozie_works/cron-job/job.properties –run
5 Oozie 和 Hue 整合
1. 修改 hue 配置文件 hue.ini
[liboozie]
# The URL where the Oozie service runs on. This is required in order for
# users to submit jobs. Empty value disables the config check.
oozie_url=http://node-1:11000/oozie
# Requires FQDN in oozie_url if enabled
## security_enabled=false
# Location on HDFS where the workflows/coordinator are deployed when submitted.
remote_deployement_dir=/user/root/oozie_works
[oozie]
# Location on local FS where the examples are stored.
# local_data_dir=/export/servers/oozie-4.1.0-cdh5.14.0/examples/apps
# Location on local FS where the data for the examples is stored.
# sample_data_dir=/export/servers/oozie-4.1.0-cdh5.14.0/examples/input-data
# Location on HDFS where the oozie examples and workflows are stored.
# Parameters are $TIME and $USER, e.g. /user/$USER/hue/workspaces/workflow-
$TIME
# remote_data_dir=/user/root/oozie_works/examples/apps
# Maximum of Oozie workflows or coodinators to retrieve in one API call.
oozie_jobs_count=100
# Use Cron format for defining the frequency of a Coordinator instead of the old
frequency number/unit.
enable_cron_scheduling=true
# Flag to enable the saved Editor queries to be dragged and dropped into a workflow.
enable_document_action=true
# Flag to enable Oozie backend filtering instead of doing it at the page level in
Javascript. Requires Oozie 4.3+.
enable_oozie_backend_filtering=true
# Flag to enable the Impala action.
enable_impala_action=true
[filebrowser]
# Location on local filesystem where the uploaded archives are temporary stored.
archive_upload_tempdir=/tmp
# Show Download Button for HDFS file browser.
show_download_button=true
# Show Upload Button for HDFS file browser.
show_upload_button=true
# Flag to enable the extraction of a uploaded archive in HDFS.
enable_extract_uploaded_archive=true
2. 启动 hue、oozie
启动 hue 进程
cd /export/servers/hue-3.9.0-cdh5.14.0
build/env/bin/supervisor
启动 oozie 进程
cd /export/servers/oozie-4.1.0-cdh5.14.0
bin/oozied.sh start
页面访问 hue
http://node-1:8888/
3. Hue 集成 Oozie
3.1. 使用 hue 配置 oozie 调度
hue 提供了页面鼠标拖拽的方式配置 oozie 调度
3.2. 利用 hue 调度 shell 脚本
在 HDFS 上创建一个 shell 脚本程序文件。
打开工作流调度页面。
3.3. 利用 hue 调度 hive 脚本
在 HDFS 上创建一个 hive sql 脚本程序文件。
打开 workflow 页面,拖拽 hive2 图标到指定位置。
3.4. 利用 hue 调度 MapReduce 程序
利用 hue 提交 MapReduce 程序
3.5. 利用 Hue 配置定时调度任务
在 hue 中,也可以针对 workflow 配置定时调度任务,具体操作如下:
一定要注意时区的问题,否则调度就出错了。保存之后就可以提交定时任务。
点击进去,可以看到定时任务的详细信息。
6 Oozie 任务查看、杀死
查看所有普通任务
oozie jobs
查看定时任务
oozie jobs -jobtype coordinator
杀死某个任务 oozie 可以通过 jobid 来杀死某个定时任务
oozie job -kill [id]
oozie job -kill 0000085-180628150519513-oozie-root-C