一、什么是Oozie
• Oozie是用于 Hadoop 平台的开源的工作流调度引擎。
• 用来管理Hadoop作业。
• 属于web应用程序,由Oozie client和Oozie Server两个组件构成。
• Oozie Server运行于Java Servlet容器(Tomcat)中的web程序。
二、Oozie作用
– 统一调度hadoop系统中常见的mr任务启动、hdfs操作、shell调度、hive操作等
– 使得复杂的依赖关系、时间触发、事件触发使用xml语言进行表达,开发效率提高
– 一组任务使用一个DAG来表示,使用图形表达流程逻辑更加清晰
– 支持很多种任务调度,能完成大部分hadoop任务处理
– 程序定义支持EL常量和函数,表达更加丰富
三、Oozie架构
四、CDH安装Zozie
1、直接添加服务。
2、
– 解压ext-2.2到/var/lib/oozie目录下
– Oozie服务中配置启用web控制台
– 保存,重启oozie服务
五、web管理地址
– http://oozie_host_ip:11000/oozie/
六、 oozie管理
– 任务列表查看
– 任务状态查看
– 流程返回信息
– 节点信息查看
– 流程图信息
– 日志查看
– 系统信息查看和配置
七、Oozie CLI 命令
• 启动任务:
– oozie job -oozie http://ip:11000/oozie/ -config job.properties –run
• 停止任务:
– oozie job -oozie http://ip:11000/oozie/ -kill 0000002-150713234209387-oozie-oozi-W
• 提交任务:
– oozie job -oozie http://ip:11000/oozie/ -config job.properties –submit
• 开始任务:
– oozie job -oozie http://ip:11000/oozie/ -config job.properties –start 0000003-150713234209387-oozie-oozi-W
• 查看任务执行情况:
– oozie job -oozie http://ip:11000/oozie/ -config job.properties –info 0000003-150713234209387-oozie-oozi-W
八、Oozie实例---创建任务
1、在任意一台主机上创建并进入目录/home/zjt/oozieJob/test01/
2、创建job.properties和workflow.xml,内容分别如下
job.properties:
nameNode=hdfs://node1:8020
jobTracker=node1:8032
queueName=default
examplesRoot=examples
oozie.wf.application.path=${nameNode}/user/${user.name}/workflow/shell
workflow.xml:
${jobTracker}
${nameNode}
mapred.job.queue.name
${queueName}
echo
hi shell in oozie
Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]
3、执行命令准备
我们能看到job.properties配置了几个参数,参数含义如下
nameNode hdfs地址
jobTracke jobTracker地址
queueName oozie队列(default)
examplesRoot 全局目录(examples)
oozie.wf.appication.path oozie流程所在hdfs地址(workflow.xml)
因此需要创建oozie.wf.appication.path中描述的目录,并且将workflow.xml上传上去
4、执行命令
oozie job -oozie http://node3:11000/oozie/ -config job.properties -run
出现下图所示结果表示执行成功:
5、前往Oozie界面查看任务
九、Oozie Job Properties - Job配置 job.properties
十、Oozie workflow - WorkFlow配置 workflow.xml
• 1、版本信息
–
• 2、EL函数
– 基本的EL函数
• String firstNotNull(String value1, String value2)
• String concat(String s1, String s2)
• String replaceAll(String src, String regex, String replacement)
• String appendAll(String src, String append, String delimeter)
• String trim(String s)
• String urlEncode(String s)
• String timestamp()
• String toJsonStr(Map) (since Oozie 3.3)
• String toPropertiesStr(Map) (since Oozie 3.3)
• String toConfigurationStr(Map) (since Oozie 3.3)
– WorkFlow EL
• String wf:id() – 返回当前workflow作业ID
• String wf:name() – 返回当前workflow作业NAME
• String wf:appPath() – 返回当前workflow的路径
• String wf:conf(String name) – 获取当前workflow的完整配置信息
• String wf:user() – 返回启动当前job的用户
• String wf:callback(String stateVar) – 返回结点的回调URL,其中参数为动作指定的退出状态
• int wf:run() – 返回workflow的运行编号,正常状态为0
• Map wf:actionData(String node) – 返回当前节点完成时输出的信息
• int wf:actionExternalStatus(String node) – 返回当前节点的状态
• String wf:lastErrorNode() – 返回最后一个ERROR状态推出的节点名称
• String wf:errorCode(String node) – 返回指定节点执行job的错误码,没有则返回空
• String wf:errorMessage(String message) – 返回执行节点执行job的错误信息,没有则返回空
– HDFS EL
• boolean fs:exists(String path)
• boolean fs:isDir(String path)
• long fs:dirSize(String path) – 目录则返回目录下所有文件字节数;否则返回-1
• long fs:fileSize(String path) – 文件则返回文件字节数;否则返回-1
• long fs:blockSize(String path) – 文件则返回文件块的字节数;否则返回-1
• 3、节点
– A、流程控制节点
• start – 定义workflow开始
• end – 定义workflow结束
• decision – 实现switch功能
• sub-workflow – 调用子workflow
• kill – 杀死workflow
• fork – 并发执行workflow
• join – 并发执行结束(与fork一起使用)
– B、动作节点
• shell
• java
• fs
• MR
• hive
• sqoop
十一、节点解释
1、Shell节点
Shell节点---job.properties
nameNode=hdfs://node1:8020
jobTracker=node1:8032
queueName=default
examplesRoot=examples
oozie.wf.application.path=${nameNode}/user/workflow/oozie/shell
Shell节点 --workflow.xml
${jobTracker}
${nameNode}
mapred.job.queue.name
${queueName}
echo
hi shell in oozie
Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]
2、Impala节点
2.1 将job.properties上传至服务器/home/zjt/oozieJob/test02-impalasql中
将workflow.xml上传至hdfs的/user/root/workflow/impala/中
调用impala---job.properties
nameNode=hdfs://node1:8020
jobTracker=node1:8032
queueName=default
examplesRoot=examples
oozie.usr.system.libpath=true
oozie.libpath=${namenode}/user/${user.name}/workflow/impala/lib
oozie.wf.application.path=${nameNode}/user/${user.name}/workflow/impala
调用impala --workflow.xml
${jobTracker}
${nameNode}
mapred.job.queue.name
${queueName}
impala-shell
-i
node2
-f
shell/impala.sql
error message[${wf:errorMessage(wf:actionData('shell-node')["impala"]) eq 'Hello Oozie'}]
2.2 前往/opt/cloudera/parcels/CDH/jars中获取impala需要的jar包
将这些jar包上传至job.properties配置的oozie.libpath中
2.3 执行下方命令创建shell目录
hadoop fs -mkdir /user/root/workflow/impala/lib/shell/
2.4 将impala.sql文件上传至/user/root/workflow/impala/lib/shell/中,impala.sql内容如下
drop table if exist page_view_02;
create table page_view_02 (page_url string, ip string);
insert into table page_view_02 select page_url, ip from page_view;
2.5、执行命令
cd /home/zjt/oozieJob/test02-impalasql
oozie job -oozie http://node3:11000/oozie/ -config job.properties -run
出现下图所示结果表示执行成功: