2种hadoop工作流调度器比较(Oozie、Azkaban)

https://github.com/azkaban/azkaban
在调度 Hadoop 的相关作业时,有以下几种方式:
    基于 Linux 系统级别的 Crontab。
    Java 应用级别的 Quartz。
    第三方的调度系统。
    自行开发 Hadoop 应用调度系统。

  对于前两种,使用 Crontab 和 Quartz 是基本可以满足业务需求,但有其弊端。在 Job 数量庞大的情况下,Crontab 脚本的编写,变得异常复杂。其调度的过程也不能透明化,让管理变得困难。Quartz 虽然不用编写脚本,实现对应的调度 API 即可,然其调度过程不透明,不涵盖 Job 运行详情。需自行开发其功能。

  因而,第三方的调度系统便应运而生了。下面的表格对上述2种hadoop工作流调度器的关键特性进行了比较,尽管这些工作流调度器能够解决的需求场景基本一致,但在设计理念,目标用户,应用场景等方面还是存在区别。

特性

Oozie

Azkaban

工作流描述语言

XML (xPDL based)

text file with key/value pairs

依赖机制

explicit

explicit

是否要web容器

Yes

Yes

进度跟踪

web page

web page

Hadoop job调度支持

yes

yes

运行模式

daemon

daemon

Pig支持

yes

yes

事件通知

no

no

需要安装

yes

yes

支持的hadoop版本

0.20+

currently unknown

重试支持

workflownode evel

yes

运行任意命令

yes

yes

Amazon EMR支持

no

currently unknown

说明如下:

Azkaban与Oozie对比

  对市面上最流行的两种调度器,给出以下详细对比。知名度比较高的应该是Apache Oozie,但是其配置工作流的过程是编写大量的XML配置,而且代码复杂度比较高,不易于二次开发。ooize相比azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。如果可以不在意某些功能的缺失,轻量级调度器azkaban是很不错的候选对象。

从功能上来对比

  两者均可以调度linux命令、mapreduce、spark、pig、java、hive、java程序、脚本工作流任务

  两者均可以定时执行工作流任务

从工作流定义上来对比

  1、Azkaban使用Properties文件定义工作流

  2、Oozie使用XML文件定义工作流

从工作流传参上来对比

  1、Azkaban支持直接传参,例如${input}

  2、Oozie支持参数和EL表达式,例如${fs:dirSize(myInputDir)}

从定时执行上来对比

  1、Azkaban的定时执行任务是基于时间的

  2、Oozie的定时执行任务基于时间和输入数据

从资源管理上来对比

  1、Azkaban有较严格的权限控制,如用户对工作流进行读/写/执行等操作

  2、Oozie暂无严格的权限控制

从工作流执行上来对比

  1、Azkaban有三种运行模式:

    1.1、solo server mode:最简单的模式,数据库内置的H2数据库,管理服务器和执行服务器都在一个进程中运行,任务量不大项目可以采用此模式。

    1.2、 two server mode:数据库为mysql,管理服务器和执行服务器在不同进程,这种模式下,管理服务器和执行服务器互不影响

    1.3 、multiple executor mode:该模式下,执行服务器和管理服务器在不同主机上,且执行服务器可以有多个

    我这次采用第二种模式,管理服务器、执行服务器分进程,但在同一台主机上。

  2、Oozie作为工作流服务器运行,支持多用户和多工作流

从工作流管理上来对比

  1、Azkaban支持浏览器以及ajax方式操作工作流

  2、Oozie支持命令行、HTTP REST、Java API、浏览器操作工作流


另一版本区别:

  两者在功能方面大致相同,

  只是Oozie底层在提交Hadoop Spark作业是通过org.apache.hadoop的封装好的接口进行提交,

  而Azkaban可以直接操作shell语句。在安全性上可能Oozie会比较好。

  工作流定义:Oozie是通过xml定义的而Azkaban为properties来定义。

  部署过程:  Oozie的部署太虐心了。有点难。同时它是从Yarn上拉任务日志。

   Azkaban中如果有任务出现失败,只要进程有效执行,那么任务就算执行成功,这是BUG,

   但是Oozie能有效的检测任务的成功与失败。

  操作工作流:Azkaban使用Web操作。Oozie支持Web,RestApi,Java API操作。

  权限控制:Oozie基本无权限控制,Azkaban有较完善的权限控制,入用户对工作流读写执行操作。

  Oozie的action主要运行在hadoop中而Azkaban的actions运行在Azkaban的服务器中。

  记录workflow的状态:Azkaban将正在执行的workflow状态保存在内存中,Oozie将其保存在Mysql中。

  出现失败的情况:Azkaban会丢失所有的工作流,但是Oozie可以在继续失败的工作流运行。


你可能感兴趣的:(Azkaban,Dao,and,Skill)