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 提交即可。
5 Oozie 和 Hue 整合
个人私心重新写了这里,因为Oozie原生使用太难用了而且坑也不少,集成后图形化界面就很好用
5.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
5.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/
5.3 Hue 集成 Oozie
5.3.1 使用 hue 配置 oozie 调度
5.3.2 利用 hue 调度 shell 脚本
在 HDFS 上创建一个 shell 脚本程序文件。
打开工作流调度页面。
5.3.3 利用 hue 调度 hive 脚本
在 HDFS 上创建一个 hive sql 脚本程序文件。
打开 workflow 页面,拖拽 hive2 图标到指定位置。
5.3.4 利用 hue 调度 MapReduce 程序
利用 hue 提交 MapReduce 程序
5.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