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

发送一个email邮件

同步

SSH动作

ssh

调用oozie服务器上的指定shell脚本

同步

Sqoop动作

sqoop

运行一个sqoop作业

异步

Distcp动作

distcp

该动作运行一个分布式复制作业

异步

Workflow异步操作

Workflow中的所有异步操作(action)都需要在hadoop集群上以mapreduce作业的方式进行执行,这样充分利用了集群的优点。 oozie通过两种方式来检查任务是否完成:

  1. 回调:当一个任务和一个计算被启动后,会为任务提供一个回调url,该任务执行完成后,会执行回调开通知oozie。
  2. 轮询:在任务执行回调失败的情况下,无论任何原因,都支持以轮询的方式进行查询。 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案例介绍

  1. 定义fs动作,在hdfs文件系统上进行文件操作。
  2. 定义fs动作,判断文件夹存在,就删除,如果不存在,不进行任何操作。
  3. 定义shell动作,在服务器的tmp目录下创建一个文件夹。
  4. 定义hive动作,执行sql脚本,将数据导入到hive中的表中。
  5. 定义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中通过输入输出事件来指定依赖。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

分布式文件存储的数据库开源项目MongoDB

MongoDB是一个基于分布式文件存储的数据库开源项目。由C++语言编写。旨在为WEB应用提供可护展的高性能数据存储解决方案。 它的特点是高性能、易部署、易使用...

39190
来自专栏黑泽君的专栏

Tomcat的Start可以启动起来,但是Debug启动突然启动不起来,一直停在 Class<T>.getDeclaredConstructors0(boolean) line: not availa

Tomcat的Start模式可以启动起来,但是Debug模式启动突然启动不起来,一直停在 Class<T>.getDeclaredConstructors0(b...

11820
来自专栏http://www.cnblogs.com

python3 logging模块

很多程序都有记录日志的需求,并且日志包含的信息有正常的程序访问日志还可能有错误,警告等信息输出,python的logging模块提供了标准的日志接口,可以通过它...

634100
来自专栏微服务生态

深入淘宝Diamond之客户端架构解析

diamond是淘宝内部使用的一个管理持久配置的系统,它的特点是简单、可靠、易用,目前淘宝内部绝大多数系统的配置,由diamond来进行统一管理。 diamo...

13130
来自专栏技术记录

Dubbo(五) Dubbo入门demo——helloworld

前言 前面我已经介绍了dubbo的一些基本工具和知识,让大家简单的了解了下RPC框架和Dubbo。接下来就是重点了,Dubbo的helloworld项目。 ? ...

1.5K90
来自专栏小巫技术博客

Gradle插件开发-上传Apk到Bugly

27760
来自专栏linux驱动个人学习

Linux进程退出详解(do_exit)--Linux进程的管理与调度(十四)

exit是c语言的库函数,他最终调用_exit。在此之前,先清洗标准输出的缓存,调用用atexit注册的函数等, 在c语言的main函数中调用return就等价...

50130
来自专栏崔庆才的专栏

一看就懂,Python 日志模块详解及应用

Windows网络操作系统都设计有各种各样的日志文件,如应用程序日志,安全日志、系统日志、Scheduler服务日志、FTP日志、WWW日志、DNS服务器日志等...

17840
来自专栏小白鼠

Hadoop集群搭建Linux环境准备基础配置安装HadoopHA集群安装HIVE安装MySQL安装HBASE安装Flume问题总结

本文主要讲解了Hadoop集群环境的搭建过程,实际应用中应该不会这样做,而是通过一些管理工具进行安装,比如可视化安装:Ambari。

57120
来自专栏匠心独运的博客

消息中间件—RabbitMQ(集群监控篇1)

摘要:任何没有监控的系统上线,一旦在生产环境发生故障,那么排查和修复问题的及时性将无法得到保证

31730

扫码关注云+社区

领取腾讯云代金券