工作流引擎Oozie(一):workflow

1. Oozie简介

Yahoo开发工作流引擎Oozie(驭象者),用于管理Hadoop任务(支持MapReduce、Spark、Pig、Hive),把这些任务以DAG(有向无环图)方式串接起来。Oozie任务流包括:coordinator、workflow;workflow描述任务执行顺序的DAG,而coordinator则用于定时任务触发,相当于workflow的定时管理器,其触发条件包括两类:

  • 数据文件生成
  • 时间条件

Oozie定义了一种基于XML的hPDL (Hadoop Process Definition Language)来描述workflow的DAG。在workflow中定义了

  • 控制流节点(Control Flow Nodes)
  • 动作节点(Action Nodes)

其中,控制流节点定义了流程的开始和结束(start、end),以及控制流程的执行路径(Execution Path),如decision、fork、join等;而动作节点包括Hadoop任务、SSH、HTTP、eMail和Oozie子流程等。控制流节点示例如下:

<workflow-app xmlns=‘uri:oozie:workflow:0.2‘ name="ooziedemo-wf">

    <start to="timeCheck"/>

    ...

    <kill name="fail">

    <message>Failed, error message[${wf:errorMessage(wf:lastErrorNode())}]

    </message>

  </kill>

  <end name="end"/>

</workflow-app>

<!-- or -->

<workflow-app xmlns=‘uri:oozie:workflow:0.2‘ name="ooziedemo-wf">

    <start ../>

    <fork name="forking">

        <path start="sqoopMerge1"/>

        <path start="sqoopMerge2"/>

    </fork>

    <join name="joining" to="end"/>

    <end ../>

</workflow-app>

其中,fork、join是成对出现,表示了工作流的并发执行,最后汇聚到一个node。从Oozie的工作流调度机制可以看出,Oozie没有能力表达复杂的DAG,比如:嵌套的依赖关系。此外,Oozie工作流可以参数化,比如:在工作流定义中使用像${inputDir}之类的变量,然后通过job.properties配置对应参数,在启动时将这些配置参数传入工作流:

oozie job -oozie http://<host>:11000/oozie/  -config job.properties  -run

2. Workflow

Action Node定义了基本的工作任务节点。(以下介绍版本基于Oozie 4.1.0)

MapReduce

一般地,我用java action启动MapReduce任务,对于任务的动态变化参数,在workflow的configuration进行配置,然后在job.properties指定参数值。

<action name="Data Clean">

    <java>

        <job-tracker>${jobTracker}</job-tracker>

        <name-node>${nameNode}</name-node>

        <configuration>

            <property>

                <name>mapred.reduce.tasks</name>

                <value>${reducerNum}</value>

            </property>

            <property>

                <name>mapreduce.job.queuename</name>

                <value>${queueName}</value>

            </property>                

        </configuration>

        <main-class>...</main-class>

        <java-opts>-Xms256m -Xmx512m</java-opts>

        <arg>..</arg>

        <arg>${nameNode}/user/${wf:user()}/xx</arg>

        ...

        <arg>${cleanDate}</arg>

        <capture-output />

    </java>

    <ok to="end" />

    <error to="fail" />

</action>

其中, ${wf:user()}为workflow的内置参数,表示当前用户名。一般地,使用该参数,为了保证写权限(毕竟没有写文件到其他用户文件夹的权限)。

Spark

Oozie支持Spark action,不过支持的不是特别好。提交spark任务时,需要加载spark-assembly jar。

<action name="Spark Data Clean">

    <spark xmlns="uri:oozie:spark-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>

        <master>yarn-cluster</master>

        <mode>cluster</mode>

        <name>etl${cleanDate}</name>

        <class>...</class>

        <jar>/<hdfs>/<path>/lib/xxx.jar</jar>

        <spark-opts>

            --num-executors ${executors} --driver-memory 4g --executor-memory 4g --executor-cores 5 --queue=${queueName}

        </spark-opts>

        <arg>..</arg>

    </spark>

    <ok to="end" />

    <error to="fail" />

</action>

Pig

Oozie内置pig action,其中<script>为pig脚本所在的HDFS路径,param为pig脚本中的参数。Oozie调度pig任务略坑,先随机指定一台机器,然后将pig脚本dist到该机器,然后执行。但是,因为集群中不同机器部署的pig版本可能不一致,而导致任务跑失败。

<action name="Pig Data Clean">

  <pig>

    <job-tracker>${jobTracker}</job-tracker>

    <name-node>${nameNode}</name-node>

    <configuration>

      <property>

        <name>mapreduce.job.queuename</name>

        <value>${queueName}</value>

      </property>

    </configuration>

    <script>/<hdfs>/<path>/data-clean.pig</script>

    <param>CLEANDATE=${cleanDate}</param>

  </pig>

  <ok to="end"/>

  <error to="fail"/>

</action>

在pig脚本中,一般用$ + 大写字母表示输入参数,示例如下:

A = load ‘/<hdfs>/<path>/$CLEANDATE‘ using OrcStorage();

...

E = ...

store E into ‘/<path>/$CLEANDATE‘;

实际上,在本地执行带参数的pig脚本时,也是用-param命令:

pig -f test.pig -param CLEANDATE=2016-05-26

Hive

Oozie也可以调度Hive任务,一般使用hive2 action通过beeline连接Hive Server 2,然后执行HiveQL:

<action name="Hive2">

  <hive2 xmlns="uri:oozie:hive2-action:0.1">

    <job-tracker>${jobTracker}</job-tracker>

    <name-node>${nameNode}</name-node>

    <configuration>

      <property>

        <name>mapreduce.job.queuename</name>

        <value>${queueName}</value>

      </property>

    </configuration>

    <jdbc-url>jdbc:hive2://host:10000/db-name</jdbc-url>

    <script>${NameNode}/<hdfs>/<path>/test.hql</script>

    <param>DAYTIME=${dayTime}</param>

  </hive2>

  <ok to="end"/>

  <error to="fail"/>

</action>

其中,param为HiveQL中的输入参数,其对应hql为

alter table db.log_tb

add if not exists partition (day_time=date ‘${DAYTIME}‘)

location ‘${DAYTIME}‘;

hive命令执行本地hql通过--hivevar传入参数:

hive  -f test.hql --hivevar DAYTIME=2016-05-17

此外,在执行hive2 action时需有如下依赖:

<dependency>

  <groupId>org.apache.hive</groupId>

  <artifactId>hive-exec</artifactId>

  <version>${hive.version}</version>

</dependency>

<dependency>

  <groupId>org.apache.hive</groupId>

  <artifactId>hive-beeline</artifactId>

  <version>${hive.version}</version>

</dependency>
时间: 2024-10-09 04:42:04

工作流引擎Oozie(一):workflow的相关文章

Alex 的 Hadoop 菜鸟教程: 第20课 工作流引擎 Oozie

本文基于 Centos6.x + CDH5.x Oozie是什么 简单的说Oozie是一个工作流引擎.只不过它是一个基于Hadoop的工作流引擎,在实际工作中,遇到对数据进行一连串的操作的时候很实用,不需要自己写一些处理代码了,只需要定义好各个action,然后把他们串在一个工作流里面就可以自动执行了.对于大数据的分析工作非常有用 安装Oozie Oozie分为服务端和客户端,我现在选择host1作为服务端,host2作为客户端. 所以在host1上运行 yum install oozie 在h

工作流引擎Oozie(二):coordinator

1. 简介 coordinator是workflow的定时提交器,基于时间条件与数据生成触发(based on time and data triggers).简单点说,coordinator按所定义的时间周期进行轮询,若数据生成条件满足,则触发workflow任务:否则,则等待数据生成或跳过(调度策略由设置的超时时间决定). 2. 详解 coordinator-app <coordinator-app name="coord-demo" frequency="${co

.net快速开发框架(工作流引擎篇)

现在办公要流程化,营销也有流程,流程现在已经是各种生活活动不可缺少的一部分了.就像这句耳熟能详的话:"凡事,我们先走个流程嘛!",在信息化.流程化的背景下.工作流引擎,这个名词就出现了!那么,什么是工作流引擎呢?所谓工作流引擎是指workflow作为应用系统的一部分,并为之提供对各应用系统有决定作用的根据角色.分工和条件的不同决定信息传递路由.内容等级等核心解决方案.工作流引擎包括了,流程的节点管理.流向管理.流程样例管理等重要功能.而我今天要带给大家的就是,一个内置了这样全面功能工作

全开源ASP.NET工作流快速开发平台,你想要的强大工作流引擎就在这里!

现在办公要流程化,营销也有流程,流程现在已经是各种生活活动不可缺少的一部分了.就像这句耳熟能详的话:"凡事,我们先走个流程嘛!",在信息化.流程化的背景下.工作流引擎,这个名词就出现了!那么,什么是工作流引擎呢?所谓工作流引擎是指workflow作为应用系统的一部分,并为之提供对各应用系统有决定作用的根据角色.分工和条件的不同决定信息传递路由.内容等级等核心解决方案.工作流引擎包括了,流程的节点管理.流向管理.流程样例管理等重要功能.而我今天要带给大家的就是,一个内置了这样全面功能工作

asp.net强大工作流引擎,learun助力开发升级

现在,办公要流程化,营销也有流程,流程现在已经是各种生活活动不可缺少的一部分了.就像这句耳熟能详的话:"凡事,我们先走个流程嘛!"在信息化.流程化的背景下.工作流引擎,这个名词就出现了!那么,什么是工作流引擎呢?所谓工作流引擎是指workflow作为应用系统的一部分,并为之提供对各应用系统有决定作用的根据角色.分工和条件的不同决定信息传递路由.内容等级等核心解决方案.工作流引擎包括了,流程的节点管理.流向管理.流程样例管理等重要功能.而我今天要带给大家的就是,一个内置了这样全面功能工作

Hadoop工作流引擎之Azkaban与Oozie对比(四)

Azkaban是什么?(一) Azkaban的功能特点(二) Azkaban的架构(三) 不多说,直接上干货! http://www.cnblogs.com/zlslch/category/938837.html 目前,市面上最流行的两种Hadoop工作流引擎调度器Azkaban与Oozie. 具体,可以进一步看我的博客. Azkaban概念学习系列http://www.cnblogs.com/zlslch/category/938837.html 和Oozie概念学习系列http://www.

工作流调度引擎---Oozie

Oozie使用教程 一.   Oozie简介 Apache Oozie是用于Hadoop平台的一种工作流调度引擎. 作用 - 统一调度hadoop系统中常见的mr任务启动hdfs操作.shell调度.hive操作等. - 使得复杂的依赖关系时间触发事件触发使用xml语言进行表达开发效率提高. - 一组任务使用一个DAG来表示,使用图形表达流程逻辑更加清晰. - 支持很多种任务调度,能完成大部分hadoop任务处理. - 程序定义支持EL常量和函数,表达更加丰富. 架构 访问 - 通过浏览器访问

开源工作流引擎 Workflow Core 的研究和使用教程

目录 开源工作流引擎 Workflow Core 的研究和使用教程 一,工作流对象和使用前说明 二,IStepBuilder 节点 三,工作流节点的逻辑和操作 容器操作 普通节点 事件 条件体和循环体 节点的异步或多线程 用于事务的操作 四,条件或开关 迭代 条件判断 节点并发 五,其它 开源工作流引擎 Workflow Core 的研究和使用教程 一,工作流对象和使用前说明 为了避免歧义,事先约定. 工作流有很多节点组成,一个节点成为步骤点(Step). 1,IWorkflow / IWork

HAWQ实践(五)——自动调度工作流(Oozie、Falcon)

一旦数据仓库开始使用,就需要不断从源系统给数据仓库提供新数据.为了确保数据流的稳定,需要使用所在平台上可用的任务调度器来调度ETL定期执行.调度模块是ETL系统必不可少的组成部分,它不但是数据仓库的基本需求,也对项目的成功起着举足轻重的作用.本篇说明如何使用HDP中的Oozie和Falcon服务实现ETL执行自动化. 一.Oozie简介 Oozie是一个管理Hadoop作业.可伸缩.可扩展.可靠的工作流调度系统,它内部定义了三种作业:工作流作业.协调器作业和Bundle作业.工作流作业是由一系列