Oozie笔记
简介
- Oozie 是用于 Hadoop 平台的开源的工作流调度引擎。
- 用于管理 Hadoop
- 属于web应用程序, 由 Oozie client 和 Oozie Server 两个组件构成。
- Oozie Server 运行于 Java Servlet容器 (Tomcat) 中的 web 程序。
作用
- 统一调度hadoop系统中场景的MR任务启动、hdfs操作、shell调度、hive操作等
- 使得复杂的依赖关系、时间触发、事件触发使用xml语言进行表达, 开发效率提高
- 一组任务使用一个DAG来表示, 使用图形表达流程逻辑更加清晰
- 支持很多种任务调度, 能完成大部分 hadoop 任务处理
- 程序定义支持 EL 常量 和 函数, 表达更加丰富
Oozie 架构

安装方式
- 手动安装
- Cloudera Manger 添加服务
Oozie Web控制台
- 解压ext-x.x到/var/lib/oozie目录下 unzip ext-x.x.zip -d /var/lib/oozie/
- Oozie服务中配置启用web控制台
- 保存,重启oozie服务
Oozie 配置
- 节点内存配置
- oozie.service.callablequeueservice.callable.concurrency(节点并发)
- oozie.service.callablequeueservice.queue.size(队列大小)
- oozie.service.ActionService.executor.ext.classes(扩展)
Oozie 共享库
- /user/oozie/share/lib(hdfs中目录)
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/ -kill 0000002-150713234209387-oozie-oozi-W
- 开始任务
- 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
Job 配置 job.properties

WorkFLow 配置
版本信息
- <workflow-app xmlns="uri:oozie:workflow:0.4" name=“workflow name">
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
节点
流程控制节点
流程控制节点
- start – 定义workflow开始
- end – 定义workflow结束
- decision – 实现switch功能
- sub-workflow – 调用子workflow
- kill – 杀死workflow
- fork – 并发执行workflow
- join – 并发执行结束(与fork一起使用)
<decision name="[NODE-NAME]">
<switch>
<case to="[NODE_NAME]">[PREDICATE]</case>
...
<case to="[NODE_NAME]">[PREDICATE]</case>
<default to="[NODE_NAME]" />
</switch>
</decision>
动作节点
shell
java
fs
MR
hive
sqoop
<fork name="[FORK-NODE-NAME]">
<path start="[NODE-NAME]" />
...
<path start="[NODE-NAME]" />
</fork>
...
<join name="[JOIN-NODE-NAME]" to="[NODE-NAME]" />
Shell节点
job.properties
nameNode=hdfs://node01:8020
jobTracker=node01:8032
queueName=default
examplesRoot=examples oozie.wf.application.path=${nameNode}/user/workflow/oozie/shellworkflow.xml
<workflow-app xmlns="uri:oozie:workflow:0.3" name="shell-wf">
<start to="shell-node"/>
<action name="shell-node">
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<exec>echo</exec>
<argument>hi shell in oozie</argument>
</shell>
<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>
调用impala
job.properties
nameNode=hdfs://node01:8020
jobTracker=node01: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/impalaworkflow.xml
<workflow-app xmlns="uri:oozie:workflow:0.4" name="impala-wf">
<start to="shell-node"/>
<action name="shell-node">
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<exec>impala-shell</exec>
<argument>-i</argument>
<argument>node02</argument>
<argument>-q</argument>
<argument>invalidate metadata</argument>
<capture-output/>
</shell>
......
</action>
.......
</workflow-app>
fs节点
workflow.xml
<workflow-app name="[WF-DEF-NAME]" xmlns="uri:oozie:workflow:0.5">
...
<action name="[NODE-NAME]">
<fs>
<delete path='[PATH]'/>
<mkdir path='[PATH]'/>
<move source='[SOURCE-PATH]' target='[TARGET-PATH]'/>
<chmod path='[PATH]' permissions='[PERMISSIONS]' dir-files='false' />
<touchz path='[PATH]' />
<chgrp path='[PATH]' group='[GROUP]' dir-files='false' />
</fs>
<ok to="[NODE-NAME]"/>
<error to="[NODE-NAME]"/>
</action>
</workflow-app>
Java节点
job.properties
nameNode=hdfs://node01:8020
jobTracker=node01:8032
queueName=default
examplesRoot=examples
oozie.usr.system.libpath=true
oozie.libpath=${nameNode}/user/workflow/lib/lib4java oozie.wf.application.path=${nameNode}/user/workflow/oozie/javaworkflow.xml
<workflow-app xmlns="uri:oozie:workflow:0.3" name="mr-wc-wf">
<start to="mr-node"/>
<action name="mr-node">
<java>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<prepare>
<delete path="${nameNode}/user/path" />
<mkdir path="${nameNode}/user/path" />
</prepare>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<main-class>com.pagename.classname</main-class>
<arg>args1</arg>
<arg>args2</arg>
</java>
<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>
Oozie笔记的更多相关文章
- Hadoop Oozie 学习笔记
Oozie是一个工作流引擎服务器,用于运行Hadoop Map/Reduce和Pig 任务工作流.同时Oozie还是一个Java Web程序,运行在Java Servlet容器中,如Tomcat. O ...
- oozie学习笔记
#################################################################################################### ...
- Hadoop学习笔记—18.Sqoop框架学习
一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据移植过去并不容易.Apache Sqoop正在加 ...
- #数据技术选型#即席查询Shib+Presto,集群任务调度HUE+Oozie
郑昀 创建于2014/10/30 最后更新于2014/10/31 一)选型:Shib+Presto 应用场景:即席查询(Ad-hoc Query) 1.1.即席查询的目标 使用者是产品/运营/销售 ...
- Hadoop概括——学习笔记<一>
之前有幸在MOOC学院抽中小象学院hadoop体验课. 这是小象学院hadoop2.X概述第一章的笔记 第一章主要讲的是hadoop基础知识.老师讲的还是比较全面简单的,起码作为一个非专业码农以及数据 ...
- sqoop笔记
adoop学习笔记—18.Sqoop框架学习 一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数 ...
- 【Oozie】安装配置Oozie
安装和配置Oozie Oozie用于Hadoop的工作流配置: 参考链接: <Install and Configure Apache Oozie Workflow Scheduler for ...
- Apache Flink学习笔记
Apache Flink学习笔记 简介 大数据的计算引擎分为4代 第一代:Hadoop承载的MapReduce.它将计算分为两个阶段,分别为Map和Reduce.对于上层应用来说,就要想办法去拆分算法 ...
- Hadoop自学笔记(一)常见Hadoop相关项目一览
本自学笔记来自于Yutube上的视频Hadoop系列.网址: https://www.youtube.com/watch?v=-TaAVaAwZTs(当中一个) 以后不再赘述 自学笔记,难免有各类错误 ...
随机推荐
- 「JLOI2015」战争调度
题目 [内存限制:256 MiB][时间限制:1000 ms] [标准输入输出][题目类型:传统][评测方式:文本比较] 题目描述 脸哥最近来到了一个神奇的王国,王国里的公民每个公民有两个下属或者没有 ...
- Java并发编程:Java内存模型JMM
简介 Java内存模型英文叫做(Java Memory Model),简称为JMM.Java虚拟机规范试图定义一种Java内存模型来屏蔽掉各种硬件和系统的内存访问差异,实现平台无关性. CPU和缓存一 ...
- 攻防世界web进阶区(1)
1.题目地址:http://111.198.29.45:43589 页面提示打开robots文件,则: 页面有提示输入fl0g.php,那么 获取flag. 2.题目地址:http://111.198 ...
- PHP 获取一周的时间
$date = array( 'Monday' => array(date('Y-m-d H:i:s',strtotime("Monday")),date('Y-m-d H: ...
- 虚拟机下安装 VMwareTools 实现宿主机和虚拟机的文件共享
$ mount /dev/sr0 /media/ #点击 虚拟机 安装 VMwareTools 挂载 $ cd /media/ $ cp VMwareTools-10.1.6-5214329.tar. ...
- Spring 通读官方文档
Spring 通读官方文档 这部分参考文档涵盖了Spring Framework绝对不可或缺的所有技术. 其中最重要的是Spring Framework的控制反转(IoC)容器.Spring框架的Io ...
- maven更新JRE更改JSE1.5
1. [代码]在maven的配置文件settings.xml中的<profiles>标签里添加如下代码,设置默认JRE编译版本为1.7 <profile> <id> ...
- Linux CentOS7 VMware 文件和目录权限chmod、更改所有者和所属组chown、umask、隐藏权限lsattr/chattr
一.文件和目录权限chmod u User,即文件或目录的拥有者:g Group,即文件或目录的所属群组:o Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围:a All,即全部 ...
- Linux CentOS7 VMware 环境变量PATH、cp命令、mv命令、文档查看cat/more/less/head/tail——笔记
一.环境变量PATH PATH一个字符串变量,当输入命令的时候LINUX会去查找PATH里面记录的路径. 命令在这几个目录里面就不需要敲绝对路径 echo $PATH 例子:把/tmp/ 加到 $PA ...
- 如何在Java中测试类是否是线程安全的
通过优锐课的java核心笔记中,我们可以看到关于如何在java中测试类是否线程安全的一些知识点汇总,分享给大家学习参考. 线程安全性测试与典型的单线程测试不同.为了测试一个方法是否是线程安全的,我们需 ...