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-2.5.0 / server
mv azkaban-executor-2.5.0 / executor
进入mysql
mysql -uroot -proot
mysql> create database azkaban;
mysql> use azkaban;
Database changed
#执行创建表的脚本
mysql> source /home/hadoop/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql ; i. 创建SSL配置
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(1 to 10)
data.map{_ * 2}.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文件以及一些需要的工程文件。