一、概述

官网:https://azkaban.github.io/
业务场景描述:假设某个业务每天产生100GB原始数据,要对其进行处理,处理步骤如下:
(1)通过Hadoop先将数据同步到HDFS上。
(2)借助MapReduce计算框架对原始数据进行转换,生成的数据以分区表的形式存储在多张Hive表中。
(3)对Hive表的数据进行统计分析,得到结果报表信息
(4)需要将统计分析得到的结果数据同步到业务系统中,供业务调用使用。
一个完整的数据分析系统通常由大量任务单元组成,各任务单元之间存在时间先后及前后依赖关系。为了很好的组织这样的复杂执行计划,需要一个工作流调度系统来调度执行。
Azkaban-工作流调度系统 - 图1

二、安装部署

Azkaban包含如下3个组件:MySQL服务器、Web服务器和Executor服务器。
Azkaban-工作流调度系统 - 图2

  • MySQL服务器:存储项目、执行计划、执行情况等信息
  • Web服务器:用户通过Web页面实现方便的管理
  • Executor服务器:负责具体工作流的提交和执行

安装包:azkaban2.5.rar
1640095920(1).png
1)把Azkaban Web服务器、Azkaban Executor服务器压缩包上传至Linux的”~/Downloads”目录下,并解压

  1. cd ~/Downloads
  2. sudo tar -zxvf azkaban-web-server-2.5.0.tar.gz -C /usr/local/
  3. sudo tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C /usr/local/
  4. sudo chown -R hadoop:hadoop /usr/local/azkaban-web-2.5.0/
  5. sudo chown -R hadoop:hadoop /usr/local/azkaban-executor-2.5.0/

2)Azkaban SQL脚本解压

  1. cd ~/Downloads
  2. sudo tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C /usr/local/

进入mysql,将解压的SQL导入到mysql中:

  1. create database azkaban;
  2. use azkaban;
  3. source /usr/local/azkaban-2.5.0/create-all-sql-2.5.0.sql

3)配置SSL

  1. cd ~
  2. keytool -keystore keystore -alias jetty -genkey -keyalg RSA
  3. #将生成的keystore证书文件拷贝至azkaban-web-server目录中
  4. sudo cp keystore /usr/local/azkaban-web-2.5.0/

4)Azkaban Web服务器配置
配置文件路径:
/usr/local/azkaban-web-2.5.0/conf/azkaban.properties
配置内容:

  1. #Azkaban Personalization Settings
  2. azkaban.name=Test
  3. azkaban.label=My Local Azkaban
  4. azkaban.color=#FF3601
  5. azkaban.default.servlet.path=/index
  6. web.resource.dir=web/
  7. default.timezone.id=Asia/Shanghai
  8. #Azkaban UserManager class
  9. user.manager.class=azkaban.user.XmlUserManager
  10. user.manager.xml.file=conf/azkaban-users.xml
  11. #Loader for projects
  12. executor.global.properties=conf/global.properties
  13. azkaban.project.dir=projects
  14. database.type=mysql
  15. mysql.port=3306
  16. mysql.host=localhost
  17. mysql.database=azkaban
  18. mysql.user=root
  19. mysql.password=root
  20. mysql.numconnections=100
  21. # Velocity dev mode
  22. velocity.dev.mode=false
  23. # Azkaban Jetty server properties.
  24. jetty.maxThreads=25
  25. jetty.ssl.port=8443
  26. jetty.port=8081
  27. jetty.keystore=keystore
  28. jetty.password=000000
  29. jetty.keypassword=000000
  30. jetty.truststore=keystore
  31. jetty.trustpassword=000000
  32. # Azkaban Executor settings
  33. executor.port=12321
  34. # mail settings
  35. mail.sender=
  36. mail.host=
  37. job.failure.email=
  38. job.success.email=
  39. lockdown.create.projects=false
  40. cache.directory=cache

5)Azkaban Executor服务器配置
配置文件路径:
/usr/local/azkaban-executor-2.5.0/conf/azkaban.properties
配置内容:

  1. #Azkaban
  2. default.timezone.id=Asia/Shanghai
  3. # Azkaban JobTypes Plugins
  4. azkaban.jobtype.plugin.dir=plugins/jobtypes
  5. #Loader for projects
  6. executor.global.properties=conf/global.properties
  7. azkaban.project.dir=projects
  8. database.type=mysql
  9. mysql.port=3306
  10. mysql.host=localhost
  11. mysql.database=azkaban
  12. mysql.user=root
  13. mysql.password=root
  14. mysql.numconnections=100
  15. # Azkaban Executor settings
  16. executor.maxThreads=50
  17. executor.port=12321
  18. executor.flow.threads=30

6)Azkaban Web服务器启动

  1. cd /usr/local/azkaban-web-2.5.0/
  2. nohup bin/azkaban-web-start.sh

7)Azkaban Executor服务器启动

  1. cd /usr/local/azkaban-executor-2.5.0/
  2. nohup bin/azkaban-executor-start.sh

8)jps查看进程
1640097906(1).png

三、应用实例

3.1 浏览器访问Azkaban服务

访问地址:https://localhost:8443
默认登录用户名和密码:azkaban/azkaban
1640098067(1).png

3.2 创建单一Job工作流

(1)创建Job描述文件:command.job
vim command.job

  1. #command.job
  2. type=command
  3. command=echo "Hello World"

(2)将Job资源文件打包成zip文件

  1. zip first.zip command.job

(3)通过Azkaban的Web管理平台创建Project并上传first.zip压缩包
1640098990(1).png

1640099059(1).png
(4)执行该Job
1640099127(1).png
1640099146(1).png
5)执行完之后会显示执行状态
1640099192(1).png
可以点击job list-Details查看日志
1640099397(1).png1640099445(1).png

3.3 创建多Job工作流

(1)创建有依赖关系的多个Job描述文件
vim step1.job

  1. #step1.job
  2. type=command
  3. command=echo foo

vim step2.job

  1. #step2.job
  2. type=command
  3. dependencies=step1
  4. command=echo bar

(2)将step1.job、step2.job打包

  1. zip second.zip step1.job step2.job

(3)通过Azkaban的Web管理平台创建Project并上传second.zip压缩包,然后执行该Job
1640099906(1).png
image.png

3.4 创建HDFS Job

(1)创建Job描述文件
vim hdfs.job

  1. #hdfs.job
  2. type=command
  3. command=hdfs dfs -mkdir /azkaban_job

3.5 创建Hive Job

(1)创建Job描述文件
vim hive.job

  1. #hive.job
  2. type=command
  3. command=hive -f'hive.hql'

创建hive.hql文件
vim hive.hql

  1. use test;
  2. create table emp_stat as select deptno,count(*) from emp group by deptno;