Oozie和Azkaban的简单了解--大数据纪录片第七记

本文详细对比了Oozie与Azkaban两大工作流任务调度系统的功能、配置方式、部署难度及操作特性。Oozie适用于Hadoop环境,通过XML定义工作流,配置复杂但功能全面;Azkaban则以properties文件定义工作流,操作更简单,有完善权限控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  刚刚了解了分布式应用程序的协调服务zookeeper,我们现在来了解一下工作流任务调度系统,就是作业协调的工具。主要了解两个主要产品oozie和azkaban。

  一、Oozie

    1、oozie本质就是一个作业协调的工具(底层原理是通过将xml语言转化成MapReduce程序来做,但只是集中在map端做处理,避免shuffle过程)。

    2、主要概念:

      ① workflow:工作流,有我们需要处理的每个工作组成,进行需求的流式处理

      ② coordinator:协调器,可以理解为工作流的协调器,可以将多个工作流协调成一个工作流来进行处理

      ③ bundle: 束,将一堆coordinator进行汇总处理

      简单来说,workflow是对要进行顺序化的工作的抽象,coordinator是对要进行顺序化的workflow的抽象,bundle是对一堆coordinator的抽象

    3、oozie的作业由三部分组成:job.properties,workflow.xml,lib

      job.properties是用来配置job中各种用到的参数

      workflow.xml是定义任务的整体流程的文件,需要注意的有三点:版本信息,EL函数,节点信息。workflow.xml文件需要被放置在HDFS上才能被oozie调度,如果启动需要调动MR任务,jar包同样需要在HDFS上。

        oozie的节点分为两种:流程控制节点和动作节点。①流程控制节点一般都是定义在工作流开始或者结束的位置,比如:start,end,kill等,以及提供工作流执行路径机制,比如:decision,fork,join等。②动作节点是负责执行具体动作的节点,比如拷贝文件,执行某个shell脚本等。

      lib是在workflow工作流定义的同级目录下,需要一个lib目录,在lib目录中存在MapReduce使用的jar包。需要注意的是,oozie并不是使用指定的jar包启动任务的,而是通过指定主类来启动任务的。在lib包中绝对不能存在某个jar包的不同版本和不能够出现多个相同的主类

    4、oozie的最终目录结构如下:

      /xxx/oozie/workflow.xml

      /xxx/oozie/lib

      /xxx/oozie/lib/mr-1.7-SNAPSHOT-package.jar  

      /xxx/oozie/lib/xxx.mr-1.7-SNAPSHOT-package.jar 

  二、Azkaban

    1、azkaban是由linkedin公司推出的批量工作流任务调度器,主要用于在一个工作流内以一个特定的顺序运行一组工作和流程。它的配置通过简单的key:value对的方式,通过配置中的dependencies来设置依赖关系,这个依赖必须是无环的,否则会被视为无效的工作流。azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

    2、azkaban主要由三个关键组件组成:关系型数据库(MySQL)、AzkabanWebServer、AzkabanExecutorServer。

      

      (1)azkaban使用数据库存储大部分状态,AzkabanWebServer和AzkabanExecutorServer都需要访问数据库

      (2)AzkabanWebServer是azkaban工作流系统的主要管理者,它负责project的管理、用户登录认证、定时执行工作流、跟踪工作流执行进度等一系列任务。同时,它还提供Web服务操作的接口,利用该接口,用户可以使用curl或其他ajax的方式,来执行azkaban的相关操作。操作包括:用户登录,创建project、上传workflow、执行workflow、查询workflow的执行进度、杀掉workflow等一系列操作,且这些操作的返回结果均是json的格式。并且azkaban使用方便,azkaban使用以.job为后缀名的键值属性文件来定义工作流中的各个任务,以及使用dependencies属性定义作业间的依赖关系链。这些作业文件和关联的代码最终以*.zip的方式通过azkaban UI传到web服务器上。

      (3)AzkabanExecutorServer主要负责具体的工作流的提交、执行,可以启动多个执行器,它通过mysql数据库来协调任务的执行。目前Azkaban将AzkabanExecutor分离成独立的服务器,这样方便某个任务流失败后,可以更方便的将其重新执行和便于Azkaban的升级。

     3、作业执行流程:

      (1)WebServer根据内存中各个Executor资源状态(WebServer有一个线程会遍历各个active Executor,去发送http请求获取其资源状态信息缓存到内存中),按照选择策略(包括executor资源状态,最近执行流个数等)选择一个executor下发作业流

      (2)executor判断是否设置作业粒度分配。如果未设置作业粒度分配,则在当前executor执行所有作业;如果设置了作业粒度分配,则当前节点会成为作业分配决策者,即分配节点

      (3)分配节点从zookeeper获取各个executor资源状态信息,然后根据策略选择一个executor分配作业

      (4)被分配到作业的executor即成为执行节点,执行作业,然后更新数据库

     4、在版本3.0中,Azkaban提供了三种模式:

      1、solo server mode:最简单的模式,数据库为内置的H2数据库,AzkabanWebServer和AzkabanExecutorServer会在同一个进程中运行

      2、two server mode:数据库为MySQL,AzkabanWebServer和AzkabanExecutorServer在不同进程中,这种模式下,AzkabanWebServer和AzkabanExecutorServer之间互不影响

      3、multiple server mode:该模式下,AzkabanWebServer和AzkabanExecutorServer运行在不同主机上,且AzkabanExecutorServer可以有多个

  三、Oozie和Azkaban对比

    1、两者在功能方面大致相同,只是oozie底层在Hadoop Spark作业是通过org.apache.hadoop的封装好的接口进行提交,而Azkaban可以直接操作shell语句,安全性上更高。oozie配置工作流的时候需要编写大量的XML配置,而且代码复杂度较高,不易于二次开发。oozie相对于azkaban是一个重量级的任务调度系统,功能全面但配置使用也更复杂。

    2、工作流定义:oozie是通过XML定义的而azkaban是通过properties来定义的

    3、oozie的部署相对困难,而且它是从yarn上拉任务日志,azkaban中如果有任务执行失败,只要进程有效执行,那么就算任务执行成功,但oozie可以有效的检测任务的成功与失败

    4、操作工作流:azkaban通过web操作,而oozie支持web,RestApi,Java API操作

    5、权限控制:oozie无权限控制,azkaban有比较完善的权限控制,供用户对工作流读写执行操作,oozie的action主要运行在hadoop中而azkaban的actions运行在azkaban的服务器中

    6、记录workflow的状态:azkaban将正在执行的workflow状态保存在内存中,而oozie保存在mysql中

    7、出现失败的情况:azkaban会丢失所有的工作流,但是oozie可以在继续失败的工作流运行

    *附上我学习Azkaban的连接:https://blog.youkuaiyun.com/clypm/article/details/79076801

 

    

转载于:https://www.cnblogs.com/qugemingzihaonan13/p/9872406.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值