Oozie原理篇

1 基本概念

(1)目前计算框架和作业类型繁多:MapReduce Java、Streaming、HQL、Pig等。
(2)如何对这些框架和作业进行统一管理和调度:
      ① 不同作业之间存在依赖关系(DAG:有向无环图,指定了作业之间的调度关系);
      ② 周期性作业;
      ③ 定时执行的作业;
      ④ 作业执行状态监控与报警。
(3)多种解决方案
      ① crontab(crontab文件包含送交cron守护进程的一系列作业和指令。每个用户可以拥有自己的crontab文件;同时,操作系统保存一个针对整个系统的crontab文件,该文件通常存放于/etc或者/etc之下的子目录中,而这个文件只能由系统管理员来修改);
      ② 自己设计调度系统;
      ③ 直接使用开源系统。

2 Hadoop作业流调度系统基本功能

(1)对常见作业类型进行调度
      ① MapReduce(Java、Streaming等)作业;
      ② Hive作业;
      ③ Pig作业;
      ④ Shell …
(2)根据需要对作业进行调度
      ① 按周期调度;
      ② 定时调度。
(3)支持容错与报警
      任务的重启;任务失败的报警等。
(4)可视化作业流运行过程
      可视化作业流,当前执行到哪个作业了,作业流当前的状态等。

3 常见的开源作业流调度系统

(1)Oozie(目前大多数企业都在用这个,所以本文接下来主要对Oozie进行讲述)
      Yahoo开源,基于xml表达作业依赖关系。
(2)Azkaban
      Linkedin开源,通过java property配置作业依赖关系。
(3)Zeus(宙斯)
      阿里开源,通过界面配置作业依赖关系。目前已经停止维护了。
(4)其他开源系统
      Cascading(通过Java API编程实现作业依赖关系)。

4 Oozie

4.1 Oozie简介

(1)Oozie是用于Hadoop 平台的开源的工作流调度引擎;
(2)用来管理Hadoop作业;
(3)属于web应用程序,由Oozie client和Oozie server两个组件构成;
(4)Oozie server运行于Java Servlet容器(Tomcat)中的web程序;
(5)Oozie以action为基本任务单位,可以将多个action构成一个DAG图(有向无环图Direct Acyclic Graph)的模式进行运行;
(6)Oozie工作流通过HPDL(一种通过XML自定义处理的语言)来构造Oozie的工作流;
(7)一个Oozie服务器主要包括四个服务:Oozie workflow、Oozie coordinator、Oozie bundlehe Oozie SLA(Service level agreement ,Oozie服务水平协议)。

4.2 Oozie四大组件

(1)Oozie workflow:该组件用于定义和执行一个特定顺序的MapReduce、Hive和Pig作业等;
(2)Oozie coordinator:该组件用于支持基于事件、系统资源存在性等条件的workflow的自动化执行;(简单地理解为工作流的协调器,可以将多个workflow工作流协调成一个coordinator工作流来进行处理)
(3)Oozie bundle:该引擎可以定义和执行“一束”应用,从而提供一个批量化的方法,将一组coordinator应用程序一起进行管理;
(4)Oozie服务水平协议(Service Level Agreement,SLA):该组件支持workflow应用程序执行过程的记录跟踪。

4.3 Oozie架构

在这里插入图片描述
(1)左侧:Oozie 通过 Tomcat Http Server 对外提供了 JAVA API 、REST API 、CLI(终端) 、Web 接口(hue) ;产生的数据存储在 Oozie object dstabase 上;
(2)中间:Oozie 的三层结构;
(3)右侧:Oozie 的 Coordinator Engine 协调引擎 能够监控基于 Time-based triggers 和 HDFS 上的 Data-based triggers;每一个 Oozie Job 都是一个只有 Map Task 的 MapReduce 程序。

4.3.1 workflow

(1)workflow使用Hadoop流程定义语言(Hadoop Process Defination Language,hPDL)来描述工作流,hPDL是类似xml语言的一种相当简洁的定义类语言。
(2)作业流由一组行为节点(Hadoop MR作业、Hive作业等)构成,且这些节点通过控制流相连。
      ① 工作流控制节点定义了工作流的起始和结束,并控制工作流的执行路径;
      ② 行为节点包含一个计算/处理任务,包括:Hadoop MapReduce,HDFS,Pig,SSH,HTTP,eMail等;可设置重试次数。
(3)Oozie工作流执行图

在这里插入图片描述
在这里插入图片描述

(4)workflow工作流生命周期
在这里插入图片描述
(5)workflow工作流状态转换图
在这里插入图片描述
(6)workflow流控制节点
在这里插入图片描述
在这里插入图片描述
(7)workflow行为节点
      ① workflow默认支持的action动作
在这里插入图片描述
      ② workflow扩展action动作 在这里插入图片描述
(8)workflow异步操作
      workflow中的所有异步操作(action)都需要在Hadoop集群上以MapReduce作业的方式进行执行,这样充分利用了集群的优点。Oozie通过两种方式来检查任务是否完成:
      ① 回调:当一个任务和一个计算被启动后,会为任务提供一个回调url,该任务执行完成后,会执行回调通知Oozie。
      ② 轮询:Oozie不停地去查询任务执行的完成状态。如果由于网络故障回调机制失败,也会使用轮询的方式去获取任务的状态。
      Oozie提供这两种方式来控制任务,将资源密集型的任务放到服务节点之外,使Oozie节约服务器资源,确保单个Oozie服务器可以支持上千个作业。
(9)workflow规则
      ① job.properties:定义workflow作业的配置信息;(内容形式为key=value)
      ② workflow.xml:定义作业的执行工作流,是一个有定义规则的xml文件;
      ③ 三方库:将依赖的.jar和.so放到lib/目录下;
      ④ 程序目录结构如下:
在这里插入图片描述

4.3.2 coordinator

(1)定期执行一个工作流;
(2)数据准备完毕后执行一个工作流。 在这里插入图片描述

4.3.3 bundle

(1)Oozie bundle是顶层抽象,允许将一组coordinator任务打包成为一个bundle任务;
(2)组成一个整体bundle的多个coordinator可以作为一个整体来进行控制,包括启动、停止、挂起、继续、重新执行等操作;
(3)bundle中不支持它的coordinator应用程序之间的显示依赖关系,如果需要定义依赖关系,可以在coordinator中通过输入输出事件来指定依赖。

4.3.4 提交作业流

(1)步骤1:将工作流文件上传到HDFS上;

hadoop fs -put ~/map-reduce map-reduce;

(2)步骤2:运行工作流;

Oozie job -Oozie http://oracle:11000/Oozie/ -config ~/map-reduce/job.properties –run
……
job: 14-20140325161321-Oozie-ninj

(3)查看工作流运行状态

Oozie job -info 14-20140325161321-Oozie-ninj -Oozie http://oracle:11000/Oozie/
4.4 作用

(1)统一调度Hadoop系统中常见的MR任务启动、HDFS操作、Shell调度、Hive操作等;
(2)使用复杂的依赖关系、事件触发、时间触发使用xml语言进行表达,开发效率提高;
(3)一组任务使用一个DAG来表示,使用图形表达流程逻辑更加清晰;
(4)支持很多种任务调度,能完成大部分Hadoop任务处理;
(5)程序定义支持EL常量和函数,表达更加丰富。

4.5 总结

(1)Oozie是管理Hadoop作业的工作流调度系统;
(2)Oozie的工作流是一系列的操作图;
(3)Oozie协调作业是通过时间(频率)以及有效数据触发当前的Oozie工作流程;
(4)Oozie是针对Hadoop开发的开源工作流引擎,专门针对大规模复杂工作流程和数据管道设计;
(5)Oozie围绕两个核心:工作流和协调器,前者定义任务的拓扑和执行逻辑,后者负责工作流的依赖和触发。

参考文章:
[1] https://blog.csdn.net/g11d111/article/details/74538789
[2] https://www.cnblogs.com/jzdwajue/p/7223657.html
[3] https://blog.csdn.net/carolzhang8406/article/details/79159391
[4] https://www.cnblogs.com/cenzhongman/p/7229387.html?yyue=a21bo.50862.201879
[5] https://blog.csdn.net/weixin_39198774/article/details/79412726
[6] https://blog.csdn.net/nsrainbow/article/details/43746111

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值