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. 上传解压重命名

mkdir  /home/hadoop/azkaban

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

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

mv azkaban-web-   / server
mv azkaban-executor-  / executor
进入mysql
mysql -uroot -proot
mysql> create database azkaban;
mysql> use azkaban;
Database changed
#执行创建表的脚本
mysql> source /home/hadoop/azkaban/azkaban-/create-all-sql-.sql ;

i. 创建SSL配置

命令: 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服务器根目录中.如:

cp keystore server/

i. 配置文件

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

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

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

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

azkaban web服务器配置

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

v  修改azkaban.properties文件

命令vi azkaban.properties

内容说明如下:

. 修改时区和首页名称:
#Azkaban Personalization Settings
azkaban.name=Test                           #服务器UI名称,用于服务器上方显示的名字
azkaban.label=My Local Azkaban                               #描述
azkaban.color=#FF3601                                                 #UI颜色
azkaban.default.servlet.path=/index                         #
web.resource.dir=web/                                                 #默认根web目录
default.timezone.id=Asia/Shanghai                           #默认时区为美国,已改为亚洲/上海
#Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager   #用户权限管理默认类
user.manager.xml.file=conf/azkaban-users.xml              #用户配置,具体配置参考下文

#Loader for projects
executor.global.properties=conf/global.properties    # global配置文件所在位置
azkaban.project.dir=projects                                                #
 . 修改 MySql 数据库配置
database.type=mysql                                                              #数据库类型
mysql.port=                                                                       #端口号
mysql.host=hadoop03                                                      #数据库连接IP
mysql.database=azkaban                                                       #数据库实例名
mysql.user=root                                                                 #数据库用户名
mysql.password=root                                                          #数据库密码
mysql.numconnections=                                                  #最大连接数

# Velocity dev mode
velocity.dev.mode=false
. 修改 Jetty 服务器属性,包括 keystore 的相关配置
# Jetty服务器属性.
jetty.maxThreads=                                                               #最大线程数
jetty.ssl.port=                                                                   #Jetty SSL端口
jetty.port=                                                                         #Jetty端口
jetty.keystore=keystore                                                          #SSL文件名
jetty.password=                                                          #SSL文件密码, 创建keystore的密码
jetty.keypassword=                                                      #Jetty主密码 与 keystore文件相同
jetty.truststore=keystore                                                                #SSL文件名
jetty.trustpassword=                                                   # SSL文件密码

# 执行服务器属性
executor.host=slave1                                    #执行服务器ip,集群模式
executor.port=                                                               #执行服务器端口
 . 修改邮件设置(可选)
# 邮件设置
mail.sender=a8589781@.com                                       #发送邮箱
mail.host=smtp..com                                                       #发送邮箱smtp地址
mail.user=xxxxxxxx                                       #发送邮件时显示的名称
mail.password=**********                                                 #邮箱密码
job.failure.email=a8589781@.com                              #任务失败时发送邮件的地址
job.success.email=a8589781@.com                            #任务成功时发送邮件的地址
lockdown.create.projects=false                                           #
cache.directory=cache                                                            #缓存目录

v  azkaban 执行服务器配置

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

vi azkaban.properties

#Azkaban
default.timezone.id=Asia/Shanghai                                              #时区

# Azkaban JobTypes 插件配置
#azkaban.jobtype.plugin.dir=plugins/jobtypes                   #jobtype 插件所在位置(如果下载jobtypes插件 就配置对应文件,参考:http://blog.itpub.net/29754888/viewspace-1418203/)

#Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects

#数据库设置
database.type=mysql                                                                       #数据库类型(目前只支持mysql)
mysql.port=                                                                                #数据库端口号
mysql.host=192.168.20.200                                                           #数据库IP地址
mysql.database=azkaban                                                                #数据库实例名
mysql.user=azkaban                                                                         #数据库用户名
mysql.password=oracle                                                                   #数据库密码
mysql.numconnections=                                                           #最大连接数

# 执行服务器配置
executor.maxThreads=                                                                #最大线程数
executor.port=                                                               #端口号(如修改,请与web服务中一致)
executor.flow.threads=                                                                #线程数

v  用户配置

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

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

<azkaban-users>
        <user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
        <user username="metrics" password="metrics" roles="metrics"/>
        <user username="admin" password="admin" roles="admin,metrics" />
        <role name="admin" permissions="ADMIN" />
        <role name="metrics" permissions="METRICS"/>
</azkaban-users>

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

启动

1. web服务器

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

cd /home/hadoop/azkaban/server/

bin/azkaban-web-start.sh

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

或者启动到后台

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

2.  执行服务器

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

cd /home/hadoop/azkaban/executor/

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
vim hello.job

type=command

command=sh hello.sh
#!/bin/bash

echo 'hello' > /home/hadoop/hello.txt

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

  1. 创建工作流 

    两个工作任务,通过dependencies进行关联
vim foo.job

type=command

command=echo foo
vim bar.job

type=command

dependencies=foo

command=echo bar

工作流如下: 

将会先调用foo再调用bar。

a)   调度hive

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

调度Spark任务Demo

创建一个新的project

编写代码
 写一段简单的Spark代码,将程序打包
package com.test
import org.apache.spark.{SparkConf, SparkContext}

object AzkabanTest extends App{
  val conf = new SparkConf()
  .setMaster("local[2]")
  .setAppName("azkabanTest")
  val sc = new SparkContext(conf)

  val data = sc.parallelize( to )
  data.map{_ * }.foreach(println)
}
编写调度命令
vim test.job
type=command
command=/usr/install/spark/bin/spark-submit --class com.test.AzkabanTest test-1.0-SNAPSHOT.jar
将这两个文件以zip的形式打包在一起
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. Ubuntu 之 initramfs 报错解决之一

    问题出现: ubuntu 更新后,编辑文件提示权限不够,并提示更新错误,重启后进入 initramfs ,仔细看提示错误有: file system check of the root filesys ...

  2. Oracle常用命令1

    一. 安装是用户管理: sqlplus /nolog; connect /as sysdba; alter user sys identified by change_on_install; alte ...

  3. 2013年山东省第四届ACM大学生程序设计竞赛-最后一道大水题:Contest Print Server

    点击打开链接 2226: Contest Print Server Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 53  Solved: 18 [Su ...

  4. 如何下载spring-framework

    http://jingyan.baidu.com/album/a65957f49670ac24e67f9b85.html?picindex=1

  5. Android——主流分辨率

    VGA:480*640 QVGA:240*320 HVGA:320*480 WVGA:480*800 FWVGA:480*854 IntelHaxm.exe  模拟器加速器

  6. 制作东皇3.2的安装U盘-黑苹果之路

    每次使用硬盘映像安装需要先装windows,制作东皇3.2安装分区,再装bootthink,再通过bootthink加载东皇3.2的分区进行安装,非常繁琐.尝试制作U盘来直接安装东皇3.2.过程如下: ...

  7. 《Code Complete》ch.22 开发者测试

    WHAT? 单元测试(Unit Testing):是将一个程序员或一个开发团队所编写的,一个完整的类.子程序或者小程序,从完整的系统中隔离出来进行测试 组件测试(Component Testing): ...

  8. Jmeter如何设置断言

    1.打开飞机订票网站,登录后,确定要查找的关键字为reservation :2.在录制的登录脚本里,添加察看结果树监听器:3.运行一遍脚本:4.在察看结果树里查找reservation文本,并定位页面 ...

  9. 慧自文档:代替 Everything 来快速查找文件的,实现文件显示在文件夹的层次结构中

    1. 搜索功能和Everything一样快和强大 具有 Everything 搜索快.搜索功能强等优点, 解决了不能方便选择搜索哪个文件夹, 解决了不能同一个画面进行预览等问题 2.文件直接显示到文件 ...

  10. Flex4/Flash多文件上传(带进度条)实例分享

    要求 必备知识 本文要求基本了解 Adobe Flex编程知识和JAVA基础知识. 开发环境 MyEclipse10/Flash Builder4.6/Flash Player11及以上 演示地址 演 ...