Oozie工作流程定义详解
来源:互联网 发布:下载torrent的软件 编辑:程序博客网 时间:2024/06/06 06:48
Oozie工作流程定义详解
Oozie工作流程定义是一个DAG(Directed Acyclical Graphs)图,它由控制流节点(Control Flow Nodes)或动作节点(Action Nodes)组成,各个节点又是通过表征转移的箭线(transitions
arrows)互相连通。对于工作流一般对应存在流程定义语言,例如jBPM是jPDL,大多数都是基于XML定义的,Oozie流程定义语言也是基于XML定义的,称为hPDL(Hadoop Process Definition Language)。
下面,我们详细说明工作流定义相关的内容:
工作流生命周期
在Oozie中,工作流的状态可能存在如下几种:
状态含义说明PREP一个工作流Job第一次创建将处于PREP状态,表示工作流Job已经定义,但是没有运行。RUNNING当一个已经被创建的工作流Job开始执行的时候,就处于RUNNING状态。它不会达到结束状态,只能因为出错而结束,或者被挂起。SUSPENDED一个RUNNING状态的工作流Job会变成SUSPENDED状态,而且它会一直处于该状态,除非这个工作流Job被重新开始执行或者被杀死。SUCCEEDED当一个RUNNING状态的工作流Job到达了end节点,它就变成了SUCCEEDED最终完成状态。KILLED当一个工作流Job处于被创建后的状态,或者处于RUNNING、SUSPENDED状态时,被杀死,则工作流Job的状态变为KILLED状态。FAILED当一个工作流Job不可预期的错误失败而终止,就会变成FAILED状态。上述各种状态存在相应的转移(工作流程因为某些事件,可能从一个状态跳转到另一个状态),其中合法的状态转移有如下几种,如下表所示:
转移前状态转移后状态集合未启动PREPPREPRUNNING、KILLEDRUNNINGSUSPENDED、SUCCEEDED、KILLED、FAILEDSUSPENDEDRUNNING、KILLED明确上述给出的状态转移空间以后,可以根据实际需要更加灵活地来控制工作流Job的运行。
控制流节点(Control Flow Nodes)
工作流程定义中,控制工作流的开始和结束,以及工作流Job的执行路径的节点,它定义了流程的开始(start节点)和结束(end节点或kill节点),同时提供了一种控制流程执行路径的机制(decision决策节点、fork分支节点、join会签节点)。通过上面提到的各种节点,我们大概应该能够知道它们在工作流中起着怎样的作用。下面,我们看一下不同节点的语法格式:
- start节点
......
上面start元素的to属性,指向第一个将要执行的工作流节点。
- end节点
......
达到该节点,工作流Job会变成SUCCEEDED状态,表示成功完成。需要注意的是,一个工作流定义必须只能有一个end节点。
- kill节点
...[MESSAGE-TO-LOG]...
kill元素的name属性,是要杀死的工作流节点的名称,message元素指定了工作流节点被杀死的备注信息。达到该节点,工作流Job会变成状态KILLED。
- decision节点
...[PREDICATE]...[PREDICATE]...
decision节点通过预定义一组条件,当工作流Job执行到该节点时,会根据其中的条件进行判断选择,满足条件的路径将被执行。decision节点通过switch…case语法来进行路径选择,只要有满足条件的判断,就会执行对应的路径,如果没有可以配置default元素指向的节点。
- fork节点和join节点
............
for元素下面会有多个path元素,指定了可以并发执行的多个执行路径。fork中多个并发执行路径会在join节点的位置会合,只有所有的路径都到达后,才会继续执行join节点。
动作节点(Action Nodes)
工作流程定义中,能够触发一个计算任务(Computation Task)或者处理任务(Processing Task)执行的节点。所有的动作(
Action)都有一些基本的特性,我先首先来看一下:
- 远程执行
对Oozie来说,动作节点的执行都是远程的,因为Oozie可能部署在一个单独的服务器上,而工作流Job是在Hadoop集群的节点上执行的。即使Oozie在Hadoop集群的某个节点上,它也是处于与Hadoop进行独立无关的JVM示例之中(Oozie部署在Servlet容器当中)。
- 异步性
动作节点的执行,对于Oozie来说是异步的。Oozie启动一个工作流Job,这个工作流Job便开始执行。Oozie可以通过两种方式来探测工作流Job的执行情况:一种是基于回调机制,对每个任务的执行(可以看成是动作节点的执行)都对应一个唯一的URL,如果任务执行结束或者执行失败,会通过回调这个URL通知Oozie已经完成;另一种就是轮询,Oozie不停地去查询任务执行的完成状态,如果由于网络故障回调机制失败,也会使用轮询的方式来处理。
- 执行结果要么成功,要么失败
如果动作节点执行成功,则会转向ok节点;如果失败则会转向error节点。
- 可恢复性
如果一个动作节点执行失败,Oozie提供了一些恢复执行的策略,这个要根据失败的特点来进行:如果是状态转移过程中失败,Oozie会根据指定的重试时间间隔去重新执行;如果不是转移性质的失败,则只能通过手工干预来进行恢复;如果重试恢复执行都没有解决问题,则最终会跳转到error节点。
下面详细介绍Oozie内置支持的动作节点类型,如下所示:
- Map-Reduce动作
map-reduce动作会在工作流Job中启动一个MapReduce Job任务运行,我们可以详细配置这个MapReduce Job。另外,可以通过map-reduce元素的子元素来配置一些其他的任务,如streaming、pipes、file、archive等等。
下面给出包含这些内容的语法格式说明:
...[JOB-TRACKER][NAME-NODE]......[MAPPER-PROCESS][REDUCER-PROCESS][RECORD-READER-CLASS][NAME=VALUE]...[NAME=VALUE]...<!-- Either streaming or pipes can be specified for an action, not both -->[MAPPER][REDUCER][INPUTFORMAT][PARTITIONER][OUTPUTFORMAT][EXECUTABLE][JOB-XML-FILE][PROPERTY-NAME][PROPERTY-VALUE]...[FILE-PATH]...[FILE-PATH]......
- Hive动作
Hive主要是基于类似SQL的HQL语言的,它能够方便地操作HDFS中数据,实现对海量数据的分析工作。HIve动作的语法格式如下所示:
...[JOB-TRACKER][NAME-NODE]......[PROPERTY-NAME][PROPERTY-VALUE]...[HIVE-SCRIPT][PARAM-VALUE]......
- Sqoop动作
Sqoop是一个能够在Hadoop和结构化存储系统之间进行数据的导入导出的工具,Sqoop动作的语法格式如下:
...[JOB-TRACKER][NAME-NODE]......[PROPERTY-NAME][PROPERTY-VALUE]...[SQOOP-COMMAND][FILE-PATH]......
- Pig动作
pig动作可以启动运行pig脚本实现的Job,在工作流定义中配置的语法格式说明如下:
...[JOB-TRACKER][NAME-NODE]......[JOB-XML-FILE][PROPERTY-NAME][PROPERTY-VALUE]...[PIG-SCRIPT][PARAM-VALUE]...[PARAM-VALUE][ARGUMENT-VALUE]...[ARGUMENT-VALUE][FILE-PATH]...[FILE-PATH]......
- Fs动作
Fs动作主要是基于HDFS的一些基本操作,如删除路径、创建路径、移动文件、设置文件全乡等等。
语法格式:
..................
- SSH动作
该动作主要是通过ssh登录到一台主机,能够执行一组shell命令,它在Oozie schema 0.2中已经被删除。
语法格式:
...[USER]@[HOST][SHELL][ARGUMENTS]......
- Java动作
Java动作,是执行一个具有main入口方法的应用程序,在Oozie工作流定义中,会作为一个MapReduce Job执行,这个Job只有一个Map任务。我们需要指定NameNode、JobTracker的信息,还有配置一个Java应用程序的JVM选项参数(java-opts),以及传给主函数(arg)。
语法格式:
...[JOB-TRACKER][NAME-NODE]......[JOB-XML][PROPERTY-NAME][PROPERTY-VALUE]...[MAIN-CLASS][JAVA-STARTUP-OPTS]ARGUMENT...[FILE-PATH]...[FILE-PATH]......
- Sub-workflow动作
Sub-workflow动作是一个子流程的动作,主流程执行过程中,遇到子流程节点执行时,会一直等待子流程节点执行完成后,才能继续跳转到下一个要执行的节点。
语法格式:
...[WF-APPLICATION-PATH][PROPERTY-NAME][PROPERTY-VALUE]......
- Shell动作
Shell动作可以执行Shell命令,并通过配置命令所需要的参数。它的语法格式:
...[JOB-TRACKER][NAME-NODE]......[PROPERTY-NAME][PROPERTY-VALUE]...[SHELL-COMMAND][ARGUMENT-VALUE]...
表达式语言函数(Expression Language Functions)
Oozie除了可以使用Properties文件定义一些属性之外,还提供了一些内置的EL函数,能够方便地实现流程的定义和控制,下面我们分组列表说明:
- 基本EL常量
- 基本EL函数
- 工作流EL函数
- Hadoop EL常量
- Hadoop EL函数
{
“ACTION_TYPE”: “MAP_REDUCE”,
“org.apache.hadoop.mapred.JobInProgress$Counter”: {
“TOTAL_LAUNCHED_REDUCES”: 1,
“TOTAL_LAUNCHED_MAPS”: 1,
“DATA_LOCAL_MAPS”: 1
},
“FileSystemCounters”: {
“FILE_BYTES_READ”: 1746,
“HDFS_BYTES_READ”: 1409,
“FILE_BYTES_WRITTEN”: 3524,
“HDFS_BYTES_WRITTEN”: 1547
},
“org.apache.hadoop.mapred.Task$Counter”: {
“REDUCE_INPUT_GROUPS”: 33,
“COMBINE_OUTPUT_RECORDS”: 0,
“MAP_INPUT_RECORDS”: 33,
“REDUCE_SHUFFLE_BYTES”: 0,
“REDUCE_OUTPUT_RECORDS”: 33,
“SPILLED_RECORDS”: 66,
“MAP_OUTPUT_BYTES”: 1674,
“MAP_INPUT_BYTES”: 1409,
“MAP_OUTPUT_RECORDS”: 33,
“COMBINE_INPUT_RECORDS”: 0,
“REDUCE_INPUT_RECORDS”: 33
}
}
则${hadoop:counters(“mr-node”)["FileSystemCounters"]["FILE_BYTES_READ"]},得到名称为mr-node的动作节点组的FILE_BYTES_READ计数器的值
- HDFS EL函数
参考链接
- http://oozie.apache.org/docs/3.3.2/WorkflowFunctionalSpec.html
- Oozie工作流程定义详解
- Oozie工作流程定义详解
- Oozie工作流程定义详解
- Oozie工作流程定义详解
- oozie 工作流程详解
- jBPM工作流程定义
- jBPM工作流程定义
- jBPM工作流程定义
- oozie详解
- 详解MapReduce工作流程
- 详解MapReduce工作流程
- Struts1工作流程详解
- 编译器工作流程详解
- Makfile详解-工作流程
- 详解SpringMVC 工作流程
- 详解MapReduce工作流程
- MapR与Oozie工作
- 流程、活动、工作项的定义
- 简单工厂模式
- 自己学驱动17——ARM工作模式和ARM9寄存器
- IDEA安装及设置
- Linux下使用crontab自动备份数据库
- httpClient简单例子
- Oozie工作流程定义详解
- 使用 jsoup 对 HTML 文档进行解析和操作
- Java中的字符编码(Unicode、UTF-8、UTF-16)的那些事儿
- Oozie Coordinator使用及详解
- Unity让敌人缓慢转向,并且跟踪玩家
- Hbase优秀博客
- UIView的sizeToFit:和fitSize方法
- 黑马程序员--Java基础(一)
- 亲密接触,虚拟现实最重要和最困难的未来