Oozie原理篇

2023-11-12 01:50
文章标签 原理篇 oozie

本文主要是介绍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

这篇关于Oozie原理篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/394269

相关文章

Flink整合Oozie Shell Action 提交任务带Kerberos认证

最近这段时间一直在忙新集群迁移,上了最新的cdh6.3.0 于是Flink 提交遇到了许多的问题,还好有cloudera License 有了原厂的帮助和社区的伙伴,问题解决起来快了不少。 集群具体情况是 CDH6.3.0 Flink1.8.1,整个数据平台全部组件都上了kerberos和ldap因为要过认证,所以任务提交方法我们选择统一Oozie提交任务,并且因为kerberos认证,还需要F

网络爬虫-原理篇(二)

四、更新策略  史链更新是网络爬虫中很重要的一个环节,对于时效性比较高的数据来说,更新策略愈发重要。     互联网是实时变化的,具有很强的动态性。网页更新策略主要是决定何时更新之前已经下载过的页面。常见的更新策略又以下三种:     1.历史参考策略     顾名思义,根据页面以往的历史更新数据,预测该页面未来何时会发生变化。一般来说,是通过泊松过程进行建模进行预测。

iOS CoreAnimation专题——原理篇(四)动画时间控制

前言CAMediaTiming协议 可视化的CAMediaTiming协议 beginTimefillModeautoreversesrepeatCountrepeatDurationspeed 动画速度的分层表示CAMediaTiming协议的其他实现 timeOffset更多的动画时间可视化插图 控制动画时间 Slider 关于fillMode和Ease的补充 fillModeEas

iOS CoreAnimation专题——原理篇(三) CALayer的模型层与展示层

前言让我们从一个改变位置的动画开始瞎子和瘸子CAAnimation对presentationLayer的控制模型与显示的同步总结 前言 上一章中我们介绍了CALayer的可动画属性,然后研究了UIView的block动画实现原理。这一章我们将深入CALayer内部,通过简单的CABasicAnimation动画来探究CALayer的两个非常重要的属性:presentation

iOS CoreAnimation专题——原理篇(二) UIView block动画实现原理

前言CALayer的可动画属性UIView的block动画 注意 再次深入总结 前言 上一章中我们深入研究了UIView和它持有的那个CALayer之间的关系,知道了我们对UIView的各种属性的操作实际上都是间接的操作了CALayer对应的属性。 这一章中我们将进一步探究iOS动画,看看UIView是如何将CoreAnimation封装成block动画的。 CALaye

iOS CoreAnimation专题——原理篇(一) CALayer与UIView之间的关系

本篇概览 这一篇中,我们将简单的探究动画原理(所以这一篇很多文字内容)。首先我们要知道我们在屏幕上看到的一切是如何被绘制出来的,我们将介绍CALayer与UIView之间的关系,以及layer的一些特性,然后我们会研究UIKit的UIView+block动画实现原理,为什么同样的一行代码在block里面就有动画在block外面就没动画,接下来我们将深入到layer内部,结合CABasicAnim

【MySQL】主键优化原理篇——【数据组织方式&主键顺序插入&主键乱序插入&页分裂&页分裂】

前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎! 本章主要内容面向接触过C++ Linux的老铁 主要内容含: 欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门! YY的《C++》专栏YY的《C++11》专栏YY的《Linux》专栏YY的《数据结构》专栏YY的《C语言基础》专栏YY的《初学者易错点》专栏YY的《小小知识点》专栏YY的《单片机期末速过》专栏YY的《

JavaWeb学习——原理篇学习

一、SpringBoot配置优先级         首先我们先知道三种SpringBoot支持的配置文件:         而当在一个Spring项目中,如果同时存在这三个配置文件,那么执行的优先级顺序应是: properties > yml > yaml 。 补充:属性配置         另外我们可以通过打包已有的SpringBoot项目,获得jar文件,在文件夹里用cm

HTML5高级编程之图形扭曲及其应用一(原理篇)

转自:http://blog.csdn.net/lufy_legend/article/details/8084367 HTML5中的变形,共有以下几种方法 scale() 缩放 rotate() 旋转 translate() 平移 transform() 矩阵变形 setTransform() 重设矩阵 这几个方法,对图片一共能完成下面几种处理 但是,

Java调用oozie提交spark on yarn任务

1.需要在oozie-site.xml设置如下属性: <property> <name>hadoop.proxyuser.cenyuhai.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.cenyuhai.groups</name> <value>*</value> </proper