[TOC]
参考:
概述
什么是azkaban
批量工作流任务调度器,
Azkaban特点
1) 兼容任何版本的hadoop(oozie需要版本兼容)
2) 易于使用的Web用户界面(可操作、可修改)
3) 简单的工作流的上传
4) 方便设置任务之间的关系
5) 调度工作流
6) 模块化和可插拔的插件机制
7) 认证/授权(权限的工作)
8) 能够杀死并重新启动工作流(可以直接在页面kill重启)
9) 有关失败和成功的电子邮件提醒
总结:我比oozie优秀(- - ||)
Azkaban的架构
三个关键组件:
1) AzkabanWebServer:AzkabanWebServer是整个Azkaban工作流系统的主要管理者:用户登录认证、负责project管理、定时执行工作流、跟踪工作流执行进度等一系列任务。
2) AzkabanExecutorServer:负责具体的工作流的提交、执行,它们通过mysql数据库来协调任务的执行。
3) 关系型数据库(MySQL):存储大部分执行流状态,AzkabanWebServer和AzkabanExecutorServer都需要访问数据库。
流程:
Azkaban安装部署
安装Azkaban
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| # 下载地址 http://azkaban.github.io/downloads.html
# 需要的包 azkaban-web-server-2.5.0.tar.gz azkaban-executor-server-2.5.0.tar.gz azkaban-sql-script-2.5.0.tar.gz
# 建目录 mkdir azkaban-2.5.0 cd azkaban-2.5.0/ # 解压 tar -zxvf /media/psf/centos_share/azkaban-executor-server-2.5.0.tar.gz -C /home/machine/apps/azkaban-2.5.0/ tar -zxvf /media/psf/centos_share/azkaban-web-server-2.5.0.tar.gz -C /home/machine/apps/azkaban-2.5.0/ tar -zxvf /media/psf/centos_share/azkaban-sql-script-2.5.0.tar.gz -C /home/machine/apps/azkaban-2.5.0/ # 该名 mv azkaban-executor-2.5.0/ executor mv azkaban-web-2.5.0/ server
# azkaban脚本导入(在azkaban-sql-script-2.5.0.tar.gz里有个create-all-sql-2.5.0.sql) create database azkaban; # 切换数据库,执行脚本create-all-sql-2.5.0.sql
|
生成密钥对和证书
HTTPS和证书说明
主要是azkaban使用的是https协议,我虚拟机里的linux需要一些额外操作来支持https才行
HTTPS= HTTP+SSL/TLS
客户端请求服务器时,服务器会发个证书过来,如果证书安全,则认为服务器是安全的。
(ps: 自己生成的证书也是不安全的,安全的证书是需要走认证流程的…)
使用java的keytool工具来做
1 2 3 4 5 6
| cd server keytool -keystore keystore -alias jetty -genkey -keyalg RSA # 密码写123456,然后一路回车,按y # server下生成了一个 keystore # 查看一下 keytool -keystore keystore --list
|
时间同步配置
和oozie那一样的,把机子修改到+0800
1 2 3 4 5 6 7
| # 查看机子的时区 date -R
# 修改 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 修改时区(立即生效) timedatectl set-timezone Asia/Shanghai
|
Web服务器配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| cd conf/
# 修改azkaban.properties web.resource.dir=/home/machine/apps/azkaban-2.5.0/server/web default.timezone.id=Asia/Shanghai user.manager.xml.file=/home/machine/apps/azkaban-2.5.0/server/conf/azkaban-users.xml executor.global.properties=/home/machine/apps/azkaban-2.5.0/executor/conf/global.properties #mysql相关 mysql.host=mxxcentos7 mysql.user=root mysql.password=123456 #使用的是jetty服务器 jetty.keystore=/home/machine/apps/azkaban-2.5.0/server/keystore jetty.password=123456 jetty.keypassword=123456 jetty.truststore=/home/machine/apps/azkaban-2.5.0/server/keystore jetty.trustpassword=123456 #邮件通知(可以不配,国内支持163)
# 修改azkaban-users.xml # 添加一个 <user username="admin" password="admin" roles="admin"/>
|
Executor服务器配置
1 2 3 4 5 6 7 8 9
| cd executor/conf/ # 修改azkaban.properties default.timezone.id=Asia/Shanghai executor.global.properties=/home/machine/apps/azkaban-2.5.0/executor/conf/global.properties # mysql mysql.host=mxxcentos7 mysql.database=azkaban mysql.user=root mysql.password=123456
|
启动executor & server服务器
1 2 3 4 5 6 7 8 9
| ./executor/bin/azkaban-executor-start.sh # 回车一下 ./server/bin/azkaban-web-start.sh # 回车一下
# 访问:https://mxxcentos7:8443 # 注意:是https,有个不安全提醒,goole浏览器下点击高级-继续前往就行了
# 登录输入admin就进入界面了
|
ps : 哇对比一下oozie那个简陋的反人类页面
常用案例
Azkaba内置的任务类型支持command、java
ps: hdfs、mapreduce、hive都可以写成command呀,和oozie不同,oozie是要整合大数据框架的,Azkaba只是单纯的调度
一个job是一个工作节点,多个job之间需要一个配置来形成工作流。这里只是一个单一job执行
注意:这个配置是用web上传的,所以下面的操作在本机上(不是linux服务器上)完成的
案例:单一job
1 2 3 4 5 6
| # 创建job描述文件 first.job(后缀必须.job) #first.job type=command command=echo 'this is my first job' # 将job资源文件打包成zip文件(只支持zip不要打其他的) first.zip
|
接下来就是页面操作了
1 2 3 4 5 6 7 8 9 10 11
| 点击Create Project 填一下 first/first
点upload,选刚才打包的first.zip,上传 上传好后,对应mysql里的project_files表已经有内容了
点Excute Flow 可以选(Schedule: 定时跑 Excute:立即执行)
绿了就成功了 Job List可以查日志
|
修改工作流程也可以页面操作
1 2 3 4 5 6 7 8 9 10 11 12
| Projects > first > 下拉点击first > Edit
改一下: echo ${param} 提交
再执行一次,点Excute Flow
(Notification可以配置邮件发送)
点Flow Parameters 加一个 param / this is my azkaban,执行看看
|
案例:邮件通知配置
目前国内邮箱只推荐使用163
修改server/conf/azkaban.properties
1 2 3 4 5 6 7 8 9 10 11
| # 先关掉 ./server/bin/azkaban-web-shutdown.sh # azkaban.properties mail.sender=hhdwwt@163.com mail.host=smtp.163.com mail.user=hhdwwt@163.com # !!这里写的不是密码,是你的163邮箱第三方客户端授权码!! mail.password=XXXXX
# 重启
|
配置job成功和失败的发送邮箱:
案例:多job工作流
创建4个job,并说明依赖关系
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| type=command command=echo 'first'
type=command command=echo 'second' dependencies=first
type=command command=echo 'third' dependencies=first
type=command command=echo 'forth' dependencies=second,third
|
然后把这四个job打包jobs.zip,上传执行看看。
流程:
执行情况
可以看到2、3是并行执行的。
看linux里边生成了2个东西:
executions:日志
projects:job文件
案例:java任务
写个类打成jar包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| package mxx.azkaban; import java.io.FileOutputStream; import java.io.IOException;
public class AzkabanTest { public void run() throws IOException { FileOutputStream fos = new FileOutputStream("/home/machine/apps/azkaban-2.5.0/output.txt"); fos.write("this is a java progress".getBytes()); fos.close(); }
public static void main(String[] args) throws IOException { AzkabanTest azkabanTest = new AzkabanTest(); azkabanTest.run(); } }
|
写job文件java.job
1 2 3
| type=javaprocess java.class=mxx.azkaban.AzkabanTest classpath=./azkaban-demo.jar
|
将 java.job 和 azkaban-demo.jar 打个 java.zip
界面上传一下,执行。
然后linux下output.txt已经生成了
案例:hdfs & mr & hive任务
这个就是个普通的command
1、运行mapreduce的wordcount
写mr.job
1 2
| type=command command=/home/machine/apps/hadoop-2.6.0-cdh5.16.1/bin/hadoop jar /home/machine/apps/hadoop-2.6.0-cdh5.16.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.16.1.jar wordcount /wordcount.txt /output_1029_1
|
打包界面上传,执行
为什么azkaban日志有error,但还是成功执行了mr?
可能是个bug…但是不影响使用
…其他都是一样的,略