目录
1、概述
1.1、为什么需要工作流调度器
1.2、工作流调度实现方式
1.3、常见工作流调度系统
1.4、各种调度工具对比
1.5、azkaban与oozie对比
1.6、azkaban介绍
2、azkaban安装部署
2.1、准备工作
2.2、安装说明
2.3、安装Azkaban Web服务器
2.4、安装Azkaban Excutor服务器
2.5、安装Azkaban脚本导入
2.6、创建SSL配置
2.7、修改配置文件
2.8、配置环境变量
2.9、启动
3、Azkaban实战演示
3.1、Command类型单一job示例
3.2、Command类型多job工作流flow
3.3、操作HDFS任务
3.4、操作MR任务
3.5、Hive脚本任务
1、一个完整的数据分析系统通常是由大量任务单元组成:
shell脚本程序、java程序、mapreduce程序、hive脚本等
2、各任务单元之间存在时间先后及前后依赖关系
3、为了很好的组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行。
简单的任务调度:直接使用linux的crontab(定时任务)来定义。
复杂的任务调度:开发调度平台或使用现成的开源调度系统,比如ooize、azkaban等。
市面上目前有许多工作流调度器
在hadoop领域,常见的工作流调度器有oozie、azkaban、cascading、hamake等
下面的表格对上述四种hadoop工作流调度器的关键特征进行了比较,尽管这些工作流调度器能够解决需求场景基本一致,但在设计理念,目标用户,应用场景等方面还是存在显著的区别,在技术选型时可供参考
特性 |
hamake |
oozie |
azkaban |
cascading |
工作流描述语言 |
xml |
xml(xpdl、based) |
text file with key/value pairs |
java API |
依赖机制 |
data-driven |
explicit |
explicit |
explicit |
是否要web容器 |
no |
yes |
yes |
no |
进度跟踪 |
console/log message |
web page |
web page |
java API |
hadoop调度支持 |
no |
yes |
yes |
yes |
运行模式 |
command line utility |
daemon |
daemon |
api |
pig支持 |
yes |
yes |
yes |
yes |
事件通知 |
no |
no |
no |
yes |
需要安装 |
no |
yes |
yes |
no |
支持的hadoop版本 |
0.18+ |
0.20+ |
currently unknown |
0.18+ |
重试支持 |
no |
workflow node evel |
yes |
yes |
运行任意命令 |
yes |
yes |
yes |
yes |
amaon EMR支持 |
yes |
no |
currently unknow |
yes |
总体来说:oozie相比azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。如果不在意某些功能的缺失,轻量级调度器azkaban是很不错的候选对象。详情如下:
两者均可以调度mapreduce、pig、java脚本工作流任务
两者均可以定时执行工作流任务
azkaban使用properties文件定义工作流
oozie使用xml文件定义工作流
azkaban支持直接传参,例如${input}
oozie支持参数和EL表达式,例如${fs:dirSize(myinputDir)} srust2(ONGL)
azkaban的定时执行时基于时间的
oozie的定时执行任务基于时间和输入数据
azkaban有较严格的权限控制,如用户对工作流进行读/写/执行等操作
oozie暂无严格的权限控制
azkaban有两种运行模式,分别是solo server mode(executor server和web server部署在同一台节点)和multi server mode(executor server和web server可以部署在不同节点)
oozie作为工作流服务器运行,支持多用户和多工作流
azkaban支持浏览器以及ajax方式操作工作流
oozie支持命令行、HTTP REST、Java API、浏览器操作工作流。
azkaban是由linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。
azkaban定义了一种KV 文件(properties)格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
它有如下功能特点:
Azkaban Web 服务器:azkaban-web-server-2.5.0.tar.gz
Azkaban Excutor 执行服务器:azkaban-executor-server-2.5.0.tar.gz Azkaban
初始化脚本文件:azkaban-sql-script-2.5.0.tar.gz
下载地址:http://azkaban.github.io/downloads.html
将安装文件上传到集群,最好上传到安装 hive、sqoop 的机器上,方便命令的执行。并最好同一存放在 apps 目录下,用于存放源安装文件.新建 azkaban 目录,用于存放 azkaban 运行程序
解压安装 tar -zxvf azkaban-web-server-2.5.0.tar.gz -C apps/ azkaban/
解压安装 tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C apps/ azkaban/
解压安装 tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C apps/ azkaban/
进入 mysql:
mysql> create database azkaban;
Query OK, 1 row affected (0.01 sec)
mysql> use azkaban;
Database changed
mysql> source /home/hadoop/apps/azkaban/azkaban-script-2.5.0/create-all-sql-2.5.0.sql;
最好是在 azkaban 目录下: 执行命令: keytool -keystore keystore -alias jetty -genkey -keyalg RSA
运行此命令后,会提示输入当前生成 keystore 的密码及相应信息,输入密码请劳记,信息如下:
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]:
What is the name of your organizational unit?
[Unknown]:
What is the name of your organization?
[Unknown]:
What is the name of your City or Locality?
[Unknown]:
What is the name of your State or Province?
[Unknown]:
What is the two-letter country code for this unit?
[Unknown]: CN
Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN correct?
[no]: y
Enter key password for
(RETURN if same as keystore password):
[root@hadoop03 azkaban]# ll
total 16
drwxr-xr-x. 7 root root 4096 Nov 21 01:53 azkaban-executor-2.5.0
drwxr-xr-x. 2 root root 4096 Nov 21 01:53 azkaban-script-2.5.0
drwxr-xr-x. 8 root root 4096 Nov 21 01:52 azkaban-web-2.5.0
-rw-r--r--. 1 root root 2232 Nov 21 02:06 keystore
完成上述工作后,将在当前目录生成 keystore 证书文件,将 keystore 拷贝到 azkaban web 服务 器根目录中.如:cp keystore azkaban/azkaban-web-2.5.0
注:先配置好服务器节点上的时区
1、先生成时区配置文件 Asia/Shanghai,用交互式命令 tzselect 即可
2、拷贝该时区文件,覆盖系统本地时区配置
sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
azkaban web 服务器配置 进入 azkaban web 服务器安装目录 conf 目录
cd apps/azkaban/azkaban-web-2.5.0/conf/
修改 azkaban.properties 文件
#Azkaban Personalization Settings
azkaban.name=MyTestAzkaban #服务器 UI 名称,用于服务器上方显示的名字
azkaban.label=My Local Azkaban #描述
azkaban.color=#FF3601 #UI 颜色
azkaban.default.servlet.path=/index
web.resource.dir=/home/hadoop/apps/azkaban/azkaban-web-2.5.0/web/ #默认根 web 目录
default.timezone.id=Asia/Shanghai #默认时区,已改为亚洲/上海 默认为美国
#Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager #用户权限管理默认类
user.manager.xml.file=/home/hadoop/apps/azkaban/azkaban-web-2.5.0/conf/azkaban-users.xml
#用户配置,具体配置参加下文
#Loader for projects # global 配置文件所在位置
executor.global.properties=/home/hadoop/apps/azkaban/azkaban-executor-2.5.0/conf/global.properties
azkaban.project.dir=projects
database.type=mysql #数据库类型
mysql.port=3306 #端口号
mysql.host=hadoop03 #数据库连接 IP
mysql.database=azkaban #数据库实例名
mysql.user=root #数据库用户名
mysql.password=root #数据库密码
mysql.numconnections=100 #最大连接数
# Velocity dev mode
velocity.dev.mode=false
# Jetty 服务器属性.
jetty.maxThreads=25 #最大线程数
jetty.ssl.port=8443 #Jetty SSL 端口
jetty.port=8081 #Jetty 端口
jetty.keystore=/home/hadoop/apps/azkaban/azkaban-web-2.5.0/keystore #SSL 文件名
jetty.password=hadoop #SSL 文件密码
jetty.keypassword=hadoop #Jetty 主密码 与 keystore 文件相同
jetty.truststore=/home/hadoop/apps/azkaban/azkaban-web-2.5.0/keystore #SSL 文件名
jetty.trustpassword=hadoop # SSL 文件密码
# 执行服务器属性
executor.port=12321 #执行服务器端口
# 邮件设置(可选项)
[email protected] #发送邮箱
mail.host=smtp.163.com #发送邮箱 smtp 地址
mail.user=xxxxxxxx #发送邮件时显示的名称
mail.password=********** #邮箱密码
[email protected] #任务失败时发送邮件的地址
[email protected] #任务成功时发送邮件的地址
lockdown.create.projects=false #
cache.directory=cache #缓存目录
用户配置 进入 azkaban web 服务器 conf 目录,修改 azkaban-users.xml vi azkaban-users.xml 增加 管理员用户
azkaban 执行服务器 executor 配置
进入执行服务器安装目录 conf,修改 azkaban.properties
#Azkaban
default.timezone.id=Asia/Shanghai #时区
# Azkaban JobTypes 插件配置,插件所在位置
azkaban.jobtype.plugin.dir=/home/hadoop/apps/azkaban/azkaban-executor-2.5.0/plugins/jobtypes
#Loader for projects
executor.global.properties=/home/hadoop/apps/azkaban/azkaban-executor-2.5.0/conf/global.properties
azkaban.project.dir=projects
#数据库设置
database.type=mysql #数据库类型(目前只支持 mysql)
mysql.port=3306 #数据库端口号
mysql.host=hadoop03 #数据库 IP 地址
mysql.database=azkaban #数据库实例名
mysql.user=root #数据库用户名
mysql.password=root #数据库密码
mysql.numconnections=100 #最大连接数
# 执行服务器配置
executor.maxThreads=50 #最大线程数
executor.port=12321 #端口号(如修改,请与 web 服务中一致)
executor.flow.threads=30 #线程数
修改~/.bashrc
export AZKABAN_WEB_HOME=/home/hadoop/apps/azkaban/azkaban-web-2.5.0
export AZKABAN_EXE_HOME=/home/hadoop/apps/azkaban/azkaban-executor-2.5.0
export PATH=$PATH:$AZKABAN_WEB_HOME/bin:$AZKABAN_EXE_HOME/bin
启动web服务器:azkaban-web-start.sh
nohup azkaban-web-start.sh 1>/home/hadoop/azwebstd.out 2>/home/hadoop/azweberr.out &
启动执行服务器:azkaban-executor-start.sh
nohup azkaban-executor-start.sh 1>/home/hadoop/azexstd.out 2>/home/hadoop/azexerr.out &
1.创建job描述文件
vi command.job
#command.job
type=command
command=echo'hello'
2.将job资源文件打包
zip command.job
3.通过azkaban web管理平台创建project并上传压缩包
1.创建有多依赖关系的多个job描述
第一个job:stepone.job
#stepone.job
type=command
command=echo stepone
第二个job:steptwo.job依赖steptwo.job
#steptwo.job
type=command
dependencies=stepone
command=echo steptwo
2.将所有资源打成一个zip包
3.执行启动
1.创建job描述文件
#hdfs.job
type=command
command=/app/hadoop/apps/hadoop-2.6.5/bin/hadoop fs -mkdir -p /hello/azkaban
2.将job资源文件打成zip包
3.创建project并上传zip包
4.启动执行
1.创建job描述文件
#mapreduce.job
type=command
command=/home/hadoop/apps/hadop-2.6.1/bin/hadoop
jar hadoop-mapreduce-examples-2.6.1jar wordcount/wordcount/input/wordcount/azout
2.将job资源文件达成jar包
3.创建project并上传zip包
4.启动执行
1.创建job描述文件和hive脚本
2.hive脚本如下:
hivetest.sql
use mycar;
drop table aztest;
create table aztest(id int,name string,sex string,age int,deparment string) row format delimited fields
terminated by ',';
load data inpath '/student.txt' into table aztest;
create table azres as select * from aztest;
insert overwrite directory '/aztest/hiveoutput' select count(1) from aztest;
job描述文件:
#hivef.job
type=command
command=/root/apps/apache-hive-1.2.1-bin/bin/hive -f 'testhive.sql'
3.将所有job资源文件达到一个zip包中
4.在azkaban的web管理界面船舰工程并上传zip包
5.启动job