Oozie是一个工作流引擎服务器,用于运行hadoop map/reduce和hive等任务工作流。

同时Oozie还是一个java web程序,运行在java servlet容器中,如tomcat中。

Oozie以action为基本单位,可以将多个action构成一个DAG图的模式运行。

Oozie工作流通过HPDL(一种通过XML自定义处理的语言)来构造Oozie工作流。

一个oozie服务器主要包括四个服务:Oozie Workflow, Oozie Coordinator, Oozie Bundle 和 Oozie SLA(oozie服务器等级协定)


Oozie Workflow:该组件用于定义和执行一个特定顺序的mapreduce,hive和pig作业。

Oozie Coordinator:该组件用于支持基于事件,系统资源存在性等条件的workflow的自动化执行。

Oozie Bundle:该引擎可以定义和执行“一束”应用,从而提供一个批量化的方法。将一组Coordinator应用程序一起进行管理。

Oozie服务器等级协定SLA:该组件支持workflow应用程序执行过程的记录跟踪。


Oozie使用tomcat等服务器作为web界面展示容器,使用关系型数据库存储Oozie的工作流元数据,默认使用debry,由于debry的缺点,一般情况使用mysql作为oozie的元数据,使用extjs来作为报表展示js框架。


workflow工作周期:

prep:一个工作流第一次创建就处于prep状态,表示工作流以及创建但是还没有运行。

running:当一个已经被创建的工作流job开始执行的时候,就处于running状态。它不会达到结束状态,只能因为出错而结束,或者被挂起。

suspended:一个running状态的工作流job会变成suspended状态,而且它会一直处于该状态,除非这个工作流job被重新开始执行或者被杀死。

killed:当一个工作流job处于被创建后的状态,或者处于running,suspended状态时,被杀死,则工作流job的状态变为killed状态。

failed:当一个工作流job不可预期的错误失败而终止,就会变为failed状态。


workflow流控制节点:

start节点 xml类型:start 该节点定义一个oozie workflow的起始的节点,一个workflow只能有且只有一个start节点。

end节点 xml类型:end 定义一个workflow的结束节点。

decision节点 xml类型:decision 该节点用于描述“switch-case”逻辑

fork节点 xml类型:fork 该节点会将多个执行流程分为多个并发操作。

join节点 xml类型:join 等待前面的fork节点指定的所有action完成。

sub-workflow节点 xml类型:sub-workflow 该节点会调用一个子workflow

kill节点 xml类型:kill 该节点会是oozie服务器杀死当前的workflow作业

当然也可以是java动作,pig动作,mapreduce动作。


workflow扩展action动作:

hive shell email ssh sqoop distcp


workflow异步操作:

workflow中的所有异步操作(action)都需要在hadoop集群上以mapreduce作业的方式进行执行。这样充分利用了集群的优点。

oozie通过两种方式来检查任务是否完成。

1回调:当一个任务和一个计算被启动后,会为任务提供一个回调url,该任务执行完成后,会执行回调来通知oozie

2轮询:在任务执行回调失败的情况下,无论任何原因,都支持以轮询的方式进行查询。

oozie提供这两种方式来控制任务。

将资源密集型的任务放到服务节点之外,使oozie节约服务器资源,确保单个oozie服务器可以支持上千个作业。


注意:需要hadoop集群开启hdfs,yarn,jobhistory服务。


Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐