Hadoop数据分析平台实战——180Oozie工作流使用介绍离线数据分析平台实战——180Oozie工作流使用介绍
离线数据分析平台实战——180Oozie工作流使用介绍
Oozie工作流介绍
Oozie的四大组件服务分别是: workflow, coordinator, bundle和sla。 其中sla是作为监控服务协议的一个组件, workflow定义oozie的基本工作流, coordinator定义定时(或者是根据其他资源指标)运行的workflow任务, bundle是将多个coordinator作为一个组件一起管理。 也就是说workflow是oozie中最基本的一个服务组件。 三大服务的的关系是:bundle包含多个coordinator,coordinator包含一个workflow,workflow定义具体的action动作。
Workflow介绍
workflow使用hadoop流程定义语言(Hadoop Process Defination Language, hPDL)来描述工作流, hPDL是类似xml语言的一种相当简洁的定义类语言,使用有限数目的流控制节点和动作节点来描述workflow,也就是workflow有两大类节点构成:工作流控制节点和动作节点。 其中工作流控制节点是workflow本身提供的一种控制workflow工作流执行路径的方法,不可以自定义;动作节点是具体的操作方法,用户可以自定义。
Workflow工作流生命周期
状态 |
含义说明 |
---|---|
PREP |
一个工作流第一次创建就出于PREP状态,表示工作流以及创建但是还没有运行。 |
RUNNING |
当一个已经被创建的工作流Job开始执行的时候,就处于RUNNING状态。它不会达到结束状态,只能因为出错而结束,或者被挂起。 |
SUSPENDED |
一个RUNNING状态的工作流Job会变成SUSPENDED状态,而且它会一直处于该状态,除非这个工作流Job被重新开始执行或者被杀死。 |
SUCCEEDED |
一个RUNNING状态的工作流Job会变成SUSPENDED状态,而且它会一直处于该状态,除非这个工作流Job被重新开始执行或者被杀死。 |
KILLED |
当一个工作流Job处于被创建后的状态,或者处于RUNNING、SUSPENDED状态时,被杀死,则工作流Job的状态变为KILLED状态。 |
FAILED |
当一个工作流Job处于被创建后的状态,或者处于RUNNING、SUSPENDED状态时,被杀死,则工作流Job的状态变为KILLED状态。 |
Workflow工作流状态转换图
转换前状态 |
转换后状态集合 |
---|---|
未启动 |
PREP |
PREP |
RUNNING、KILLED |
RUNNING |
SUSPENDED、KILLED、SUCCEEDED、FAILED |
SUSPENDED |
RUNNING、KILLED |
Workflow流控制节点
流控制节点 |
XML元素类型 |
描述 |
---|---|---|
Start节点 |
start |
该节点定义一个oozie workflow的起始节点,一个workflow只能有且只有一个start节点。 |
End节点 |
end |
定义一个workflow的结束节点。 |
Decision节点 |
decision |
该节点用于描述"switch-case"逻辑 |
Fork节点 |
fork |
该节点会将多个执行流程分为多个并非操作。 |
Join节点 |
join |
等待前面的fork节点指定的所有action完成。 |
Sub-workflow节点 |
sub-workflow |
该节点会调用一个子workflow |
Kill节点 |
kill |
该节点会是oozie服务器杀死当前的workflow作业 |
Workflow默认支持的action动作
动作节点 |
XMl元素类型 |
描述 |
类型 |
---|---|---|---|
Java动作 |
java |
该动作调用一个java类的main方法 |
异步 |
Pig动作 |
pig |
该动作调用一个Pig作业 |
异步 |
Mapreduce动作 |
map-reduce |
该动作会运行一个mapreduce作业,可以是java的mapreduce作业,也可以是streaming作业和pipe作业 |
异步 |
Hdfs动作 |
fs |
该动作运行定义给一个在HDFS上执行的命令(delete、mkdir、move 和chmod等)序列 |
同步 |
Workflow扩展action动作
动作节点 |
XML元素类型 |
描述 |
类型 |
---|---|---|---|
Hive动作 |
hive |
运行一个hive作业 |
异步 |
Shell动作 |
shell |
运行一个shell作业 |
同步 |
Email动作 |
发送一个email邮件 |
同步 |
|
SSH动作 |
ssh |
调用oozie服务器上的指定shell脚本 |
同步 |
Sqoop动作 |
sqoop |
运行一个sqoop作业 |
异步 |
Distcp动作 |
distcp |
该动作运行一个分布式复制作业 |
异步 |
Workflow异步操作
Workflow中的所有异步操作(action)都需要在hadoop集群上以mapreduce作业的方式进行执行,这样充分利用了集群的优点。 oozie通过两种方式来检查任务是否完成:
- 回调:当一个任务和一个计算被启动后,会为任务提供一个回调url,该任务执行完成后,会执行回调开通知oozie。
- 轮询:在任务执行回调失败的情况下,无论任何原因,都支持以轮询的方式进行查询。 oozie提供这两种方式来控制任务,将资源密集型的任务放到服务节点之外,使oozie节约服务器资源,确保单个oozie服务器可以支持上千个作业。
注意: 需要hadoop集群开启hdfs、yarn和jobhistory服务。
Workflow规则
workflow任务主要由job.properties、workflow.xml和其他动作需要的资源文件三部分组成,其中job.properties中定义workflow作业的配置信息,workflow.xml定义作业的执行工作流。workflow.xml文件是一个有定义规则的xml文件。 workflow.xml配置规则详见:..文档workflow.template.xml job.properties配置参考:..文档job.template.properties
Workflow案例介绍
- 定义fs动作,在hdfs文件系统上进行文件操作。
- 定义fs动作,判断文件夹存在,就删除,如果不存在,不进行任何操作。
- 定义shell动作,在服务器的tmp目录下创建一个文件夹。
- 定义hive动作,执行sql脚本,将数据导入到hive中的表中。
- 定义mapreduce动作,执行mapreduce任务。
执行命令:
oozie job -oozie http://hh:11000/oozie -config xxx/job.properties -run
Coordinator介绍
coordinator支持workflow过程的自动启动,常用于一些由时间/数据可用性来触发的、会多次调用的workflow过程的设计和执行。通过定义多个顺序运行的、前一个输出作为后一个输入的workflow,coordinator也支持定义常规运行的(包括以不同时间间隔运行的)workflow作业之间的依赖。
案例:编写一个每两分钟执行一次的workflow(也就是coordinator)任务。
Bundle介绍
Oozie Bundle是顶层抽象,允许将一组coordinator任务打包成为一个bundle任务。 组成一个整体bundle的多个coordinator可以作为一个整体来进行控制,包括启动、停止、挂起、继续、重新执行等操作。 Bundle中不支持它的coordinator应用程序之间的显示依赖关系,如果需要定义这些依赖关系,可以在 coordinator中通过输入输出事件来指定依赖。
- Spark详解02Job 逻辑执行图Job 逻辑执行图
- Spark详解01概览|Spark部署|执行原理概览Job 例子
- Spark详解05架构Architecture架构
- SQL Server常用命令(平时不用别忘了)
- Spark详解06容错机制Cache 和 Checkpoint Cache 和 Checkpoint
- SQL Server 学习笔记
- Collaborative Filtering(协同过滤)算法详解
- 【Hadoop】三句话告诉你 mapreduce 中MAP进程的数量怎么控制?
- Spark系列课程-00xxSpark RDD持久化
- RDD持久化
- P02_Hadoop CDH 5.3.6集群搭建
- P01_Spark开发测试运行环境安装Spark开发测试运行环境安装
- spark2.x依赖包POM
- P03_Hive 安装
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法