1 两种调度工具功能对比图

下面的表格对上述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

1   Azkaban与Oozie对比

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

l  功能

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

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

l  工作流定义

Azkaban使用Properties文件定义工作流

Oozie使用XML文件定义工作流

l  工作流传参

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

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

l  定时执行

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

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

l  资源管理

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

Oozie暂无严格的权限控制

l  工作流执行

Azkaban有三种运行模式:

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

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

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

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

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

l  工作流管理

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

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

3     Azkaban简介

Azkaban是一种类似于Oozie的工作流控制引擎,可以用来解决多个Hadoop(或Spark等)离线计算任务之间的依赖关系问题。

也可以用其代替crontab来对周期性任务进行调度,并且更为直观,可靠,同时提供了美观的可视化管理界面。

l  azkaban由三部分构成:

l  Relational Database(Mysql)

l  azkaban将大多数状态信息都存于MySQL中,Azkaban Web Server 和 Azkaban Executor Server也需要访问DB。

l  Azkaban Web Server

l  提供了Web UI,是azkaban的主要管理者,包括 project 的管理,认证,调度,对工作流执行过程的监控等。

l  Azkaban Executor Server

l  调度工作流和任务,纪录工作流活任务的日志,之所以将AzkabanWebServer和AzkabanExecutorServer分开,主要是因为在某个任务流失败后,可以更方便的将重新执行。而且也更有利于Azkaban系统的升级

a)   安装

参考

http://blog.csdn.net/bbaiggey/article/details/50775568

i. 上传解压重命名

  1. mkdir /home/hadoop/azkaban

将主要的3个jar先上传 解压

解压,重命名(不是必要的步骤为了方便我选择重命名)

  1. mv azkaban-web- / server
  2. mv azkaban-executor- / executor
  3. 进入mysql
  4. mysql -uroot -proot
  5. mysql> create database azkaban;
  6. mysql> use azkaban;
  7. Database changed
  8. #执行创建表的脚本
  9. mysql> source /home/hadoop/azkaban/azkaban-/create-all-sql-.sql ;

i. 创建SSL配置

  1. 命令: keytool -keystore keystore -alias jetty -genkey -keyalg RSA

运行此命令后,会提示输入当前生成 keystore的密码及相应信息,输入的密码请劳记,信息如下:

输入keystore密码:

再次输入新密码:

您的名字与姓氏是什么?

[Unknown]:

您的组织单位名称是什么?

[Unknown]:

您的组织名称是什么?

[Unknown]:

您所在的城市或区域名称是什么?

[Unknown]:

您所在的州或省份名称是什么?

[Unknown]:

#以上内容只需回车不用填写

该单位的两字母国家代码是什么

[Unknown]:  CN

CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN 正确吗?

[否]:  y

输入<jetty>的主密码

(如果和 keystore 密码相同,按回车):

再次输入新密码:

完成上述工作后,将在当前目录生成 keystore 证书文件,将keystore 拷贝到 azkaban web服务器根目录中.如:

  1. cp keystore server/

i. 配置文件

注:先配置好服务器节点上的时区(或者先date一下看看自己的时区是不是CST时区,如果是的话这一步可以省去)

1、先生成时区配置文件Asia/Shanghai,用交互式命令 tzselect 即可

1、拷贝该时区文件,覆盖系统本地时区配置

  1. cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

azkaban web服务器配置

进入azkaban web服务器安装目录 conf目录

v  修改azkaban.properties文件

命令vi azkaban.properties

内容说明如下:

  1. . 修改时区和首页名称:
  2. #Azkaban Personalization Settings
  3. azkaban.name=Test #服务器UI名称,用于服务器上方显示的名字
  4. azkaban.label=My Local Azkaban #描述
  5. azkaban.color=#FF3601 #UI颜色
  6. azkaban.default.servlet.path=/index #
  7. web.resource.dir=web/ #默认根web目录
  8. default.timezone.id=Asia/Shanghai #默认时区为美国,已改为亚洲/上海
  9. #Azkaban UserManager class
  10. user.manager.class=azkaban.user.XmlUserManager #用户权限管理默认类
  11. user.manager.xml.file=conf/azkaban-users.xml #用户配置,具体配置参考下文
  12.  
  13. #Loader for projects
  14. executor.global.properties=conf/global.properties # global配置文件所在位置
  15. azkaban.project.dir=projects #
  16. . 修改 MySql 数据库配置
  17. database.type=mysql #数据库类型
  18. mysql.port= #端口号
  19. mysql.host=hadoop03 #数据库连接IP
  20. mysql.database=azkaban #数据库实例名
  21. mysql.user=root #数据库用户名
  22. mysql.password=root #数据库密码
  23. mysql.numconnections= #最大连接数
  24.  
  25. # Velocity dev mode
  26. velocity.dev.mode=false
  27. . 修改 Jetty 服务器属性,包括 keystore 的相关配置
  28. # Jetty服务器属性.
  29. jetty.maxThreads= #最大线程数
  30. jetty.ssl.port= #Jetty SSL端口
  31. jetty.port= #Jetty端口
  32. jetty.keystore=keystore #SSL文件名
  33. jetty.password= #SSL文件密码, 创建keystore的密码
  34. jetty.keypassword= #Jetty主密码 与 keystore文件相同
  35. jetty.truststore=keystore #SSL文件名
  36. jetty.trustpassword= # SSL文件密码
  37.  
  38. # 执行服务器属性
  39. executor.host=slave1 #执行服务器ip,集群模式
  40. executor.port= #执行服务器端口
  41. . 修改邮件设置(可选)
  42. # 邮件设置
  43. mail.sender=a8589781@.com #发送邮箱
  44. mail.host=smtp..com #发送邮箱smtp地址
  45. mail.user=xxxxxxxx #发送邮件时显示的名称
  46. mail.password=********** #邮箱密码
  47. job.failure.email=a8589781@.com #任务失败时发送邮件的地址
  48. job.success.email=a8589781@.com #任务成功时发送邮件的地址
  49. lockdown.create.projects=false #
  50. cache.directory=cache #缓存目录

v  azkaban 执行服务器配置

进入执行服务器安装目录conf,修改azkaban.properties

vi azkaban.properties

  1. #Azkaban
  2. default.timezone.id=Asia/Shanghai #时区
  3.  
  4. # Azkaban JobTypes 插件配置
  5. #azkaban.jobtype.plugin.dir=plugins/jobtypes #jobtype 插件所在位置(如果下载jobtypes插件 就配置对应文件,参考:http://blog.itpub.net/29754888/viewspace-1418203/)
  6.  
  7. #Loader for projects
  8. executor.global.properties=conf/global.properties
  9. azkaban.project.dir=projects
  10.  
  11. #数据库设置
  12. database.type=mysql #数据库类型(目前只支持mysql)
  13. mysql.port= #数据库端口号
  14. mysql.host=192.168.20.200 #数据库IP地址
  15. mysql.database=azkaban #数据库实例名
  16. mysql.user=azkaban #数据库用户名
  17. mysql.password=oracle #数据库密码
  18. mysql.numconnections= #最大连接数
  19.  
  20. # 执行服务器配置
  21. executor.maxThreads= #最大线程数
  22. executor.port= #端口号(如修改,请与web服务中一致)
  23. executor.flow.threads= #线程数

v  用户配置

进入azkaban web服务器conf目录,修改azkaban-users.xml

vi azkaban-users.xml 增加 管理员用户

  1. <azkaban-users>
  2. <user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
  3. <user username="metrics" password="metrics" roles="metrics"/>
  4. <user username="admin" password="admin" roles="admin,metrics" />
  5. <role name="admin" permissions="ADMIN" />
  6. <role name="metrics" permissions="METRICS"/>
  7. </azkaban-users>

注意:检查安载包web和executor的lib文件下是否有mysql驱动,若不存在,则拷贝一个

启动

1. web服务器

在azkaban web服务器目录下执行启动命令

  1. cd /home/hadoop/azkaban/server/
  2.  
  3. bin/azkaban-web-start.sh

注:在web服务器根目录运行(一定要在根目录下执行因为配置文件中有一个conf/xxx 在其他目录下会找不到conf目录的)

或者启动到后台

  1. nohup bin/azkaban-web-start.sh >/tmp/azstd.>/tmp/azerr.out & 或者 (nohup ./bin/azkaban-web-start.sh & )

2.  执行服务器

在执行服务器目录下执行启动命令

  1. cd /home/hadoop/azkaban/executor/
  2.  
  3. bin/azkaban-executor-start.sh

注:只能在执行服务器根目录运行

也可以在后台运行:nohup ./bin/azkaban-executor-start.sh &

启动完成后,在浏览器(建议使用谷歌浏览器)中输入https://服务器IP地址:8443 ,即可访问azkaban服务了.在登录中输入刚才新的户用名及密码,点击 login.

a)   实例demo

参考

http://blog.csdn.net/lsshlsw/article/details/50831239

  1. 创建工作任务 

    创建.job为后缀的文件,type是工作任务类型执行会输出 Hello World
  1. vim hello.job
  2.  
  3. type=command
  4.  
  5. command=sh hello.sh
  1. #!/bin/bash
  2.  
  3. echo 'hello' > /home/hadoop/hello.txt

放到同一个目录下然后进行压缩,目前只支持.zip格式的压缩文件

  1. 创建工作流 

    两个工作任务,通过dependencies进行关联
  1. vim foo.job
  2.  
  3. type=command
  4.  
  5. command=echo foo
  1. vim bar.job
  2.  
  3. type=command
  4.  
  5. dependencies=foo
  6.  
  7. command=echo bar

工作流如下: 

将会先调用foo再调用bar。

a)   调度hive

  1. # hive.job
  2. type=command
  3. command=hive -f 'test.sql'
  1. vim test.sql
  2. use default;
  3. drop table aztest if exists;
  4. create table aztest(id int,name string) row format delimited fields terminated by ',';
  5. load data inpath '/tmp/hadoop/aztest/' into table aztest;
  6. create table az2 as select * from aztest;

调度Spark任务Demo

创建一个新的project

  1. 编写代码
  2. 写一段简单的Spark代码,将程序打包
  3. package com.test
  4. import org.apache.spark.{SparkConf, SparkContext}
  5.  
  6. object AzkabanTest extends App{
  7. val conf = new SparkConf()
  8. .setMaster("local[2]")
  9. .setAppName("azkabanTest")
  10. val sc = new SparkContext(conf)
  11.  
  12. val data = sc.parallelize( to )
  13. data.map{_ * }.foreach(println)
  14. }
  1. 编写调度命令
  2. vim test.job
  3. type=command
  4. command=/usr/install/spark/bin/spark-submit --class com.test.AzkabanTest test-1.0-SNAPSHOT.jar
  5. 将这两个文件以zip的形式打包在一起
  6. zip -r xxx.zip azkabanTest

上传工程

目前azkaban只支持zip包,其中要包括.job文件以及一些需要的工程文件。

Oozie和Azkaban的技术选型和对比的更多相关文章

  1. #数据技术选型#即席查询Shib+Presto,集群任务调度HUE+Oozie

    郑昀 创建于2014/10/30 最后更新于2014/10/31   一)选型:Shib+Presto 应用场景:即席查询(Ad-hoc Query) 1.1.即席查询的目标 使用者是产品/运营/销售 ...

  2. 多维度对比5款主流分布式MQ消息队列,妈妈再也不担心我的技术选型了

    1.引言 对于即时通讯网来说,所有的技术文章和资料都在围绕即时通讯这个技术方向进行整理和分享,这一次也不例外.对于即时通讯系统(包括IM.消息推送系统等)来说,MQ消息中件间是非常常见的基础软件,但市 ...

  3. 剑指Kubernetes 揭秘腾讯云的PaaS技术选型策略

    1.前言 Kubernetes 很火,一大批互联网公司早已领先一步,搭建起专有的 PaaS平台,传统企业们看到的 Kubernetes的趋势,亦不甘落后,在试水的道上一路狂奔-- 虽然,Kuberne ...

  4. [转]聊聊技术选型 - Angular2 vs Vue2

    转载:https://juejin.im/post/58cab85b44d9040069f38f7a "Come, and take choice of all my library, An ...

  5. Web开发技术选型之Java与PHP

    PHP与J2EE的对比 网上有很多关于PHP与J2EE之间的对比,细观无非以下几点: 1.语言特征 PHP为脚本语言,解释型语言,弱类型,专为Web开发打造.Java为C语言系编程语言,编译型,强类型 ...

  6. 前端开发工程师 - 05.产品前端架构 - 协作流程 & 接口设计 & 版本管理 & 技术选型 &开发实践

    05.产品前端架构 第1章--协作流程 WEB系统 角色定义 协作流程 职责说明 第2章--接口设计 概述 接口规范 规范应用 本地开发 第3章--版本管理 见 Java开发工程师(Web方向) - ...

  7. 【搜索引擎】SOLR VS Elasticsearch(2019技术选型参考)

    SOLR是什么 (官方的解释) Solr是基于Apache Lucene构建的流行的.快速的.开源的企业搜索平台. Solr也是高度可靠.可伸缩和容错的,提供分布式索引.复制和负载平衡查询.自动故障转 ...

  8. Leader 让我做 CMS 帮助中心的技术选型,我撸了 VuePress 和 GitBook,然后选择...

    前言 因为自己平时经常写博客,也有博客网站,所以 Leader 叫我做一个 CMS 的帮助中心的技术选型,CMS 的帮助中心的功能:是通过文章来教用户如何使用我们的项目. 所以笔者要做一个静态网站的技 ...

  9. 聊聊技术选型 - Angular2 vs Vue2

    作者介绍:李旸,美团点评前端工程师,3 年 Web 前端开发经验,现在是美团点评点餐团队的一员. "Come, and take choice of all my library, And ...

随机推荐

  1. 用jQuery之后,之前javascript的一些方法就不能用了吗

    用jQuery之后,之前javascript的一些方法就不能用了吗? 比如$("#btn").onclick = function(){}这种用法?或者$("#btn&q ...

  2. bootstrap 中是通过写less文件来生成css文件,用什么工具来编写呢?

    bootstrap 中是通过写less文件来生成css文件,用什么工具来编写呢? 如果用sublime的话如何实现代码保存后浏览器刷新成最新的代码样式? 或者有什么其他好用的工具? 从网上找了很多方法 ...

  3. Django 应用 Buildbot

    Django作者之一 JACOB KAPLAN 所写的buildbot应用在Django系统. 全文总共分为两个部分 1,http://jacobian.org/writing/ci-is-hard/ ...

  4. windows openssl

    1.安装Perl 下载 ActivePerl-5.20.2.2001-MSWin32-x64-298913,安装到 C:\Perl64\eg 运行 => cmd => cd C:\Perl ...

  5. 在 MVC 控制器中使用 构造函数时行依赖注入 (IoC)

    在 Controller 中使用 构造函数进行依赖注入 (IoC) 1. Controller 代码: ICard card; ICardCategory cardCategory; public C ...

  6. ios开发错误笔记

    今天的奇葩错误,最后解决方式是删除了手机上面的快捷方式,然后再clean,然后再重启了xcode.无语了,xcode也经常出些奇葩问题,真无语啊. ios技术交流群:378501081..期待你加入. ...

  7. jquery递归遍历xml文件,形成ul-li序列,生成树结构(使用了treeview插件)

    treeview插件从这里获得,下载的文件中有demo,看demo文件夹里面的index.html文件就差不多知道如何使用该控件了,在我做的项目里用到的部分代码截图如下(在引用下面的js文件前要先引用 ...

  8. CLRS:Insert sort in in c

    #include<stdio.h>#include<string.h>#include<stdlib.h>#include<time.h>#define ...

  9. .NET 命名规范 代码示例

    class Person { /// <summary> /// 公有字段.属性 首字母大写 /// </summary> public string FirstName; p ...

  10. C# Java 3DES加密解密 扩展及修正\0 问题

    注: C#已亲测及做扩展, Java 部分未做验证 /// <summary> /// 3DES加密解密 /// ------------------------------------- ...