Oozie和Azkaban的技术选型和对比
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
- 创建工作任务
创建.job为后缀的文件,type是工作任务类型执行会输出 Hello World
vim hello.job type=command command=sh hello.sh
#!/bin/bash echo 'hello' > /home/hadoop/hello.txt
放到同一个目录下然后进行压缩,目前只支持.zip格式的压缩文件
- 创建工作流
两个工作任务,通过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文件以及一些需要的工程文件。
最新文章
- C++标准库实现WAV文件读写
- 时钟周期,CPU周期,指令周期,CPU时间片
- Spring源码分析——BeanFactory体系之抽象类、类分析(一)
- 湖南省第十二届大学生计算机程序设计竞赛 F 地铁 多源多汇最短路
- Visual Studio 换皮肤
- UART UVM验证平台平台搭建总结
- ext3中xtype属性汇总
- 浅析 JavaScript 的函数节流和去抖
- js秒数转换时分秒方法
- iOS 日历控件
- 区分javascript中的toString(),toLocaleString(),valueOf()方法
- 利用linq的Take Skip方法解决 集合拆分的问题
- CSS3字体发光效果
- python中读取文件数据时要注意文件路径
- IDEA搭建本地服务器解决无法连接https://start.spring.io
- MFC实现一元稀疏多项式运算器
- ASP.NET Web API实践系列09,在Fiddler和控制台中模拟GET和POST请求
- Android -- View流程
- 【WPF】使用控件MediaElement播放视频
- StringUtils学习