第一章 Azkaban概述
1.1 为什么需要工作流调度系统
1)一个完整的数据分析系统通常都是由大量任务单元组成:
Shell脚本程序,Java程序,MapReduce程序、Hive脚本等
2)各任务单元之间存在时间先后及前后依赖关系
3)为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行;
1.2 常见工作流调度系统
1)简单的任务调度:直接使用Linux的Crontab来定义;
2)复杂的任务调度:开发调度平台或使用现成的开源调度系统,比如Azkaban、Ooize、Airflow、DolphinScheduler等。
1.3 Azkaban与Oozie对比
对市面上最流行的两种调度器,给出以下详细对比,以供技术选型参考。总体来说,Ooize相比Azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。如果可以不在意某些功能的缺失,轻量级调度器Azkaban是很不错的候选对象。
第二章 Azkaban入门
2.1 集群模式安装
2.1.1 配置MySQL
1)首先应该下载安装Azkaban,并且需要配置好mysql(如若不会,欢迎询问)
2)启动MySQL
mysql -uroot -p123456
3)登陆MySQL,创建Azkaban数据库
create database azkaban;
4)创建azkaban用户并赋予权限
创建Azkaban用户,任何主机都可以访问Azkaban,密码是123456
CREATE USER 'azkaban'@'%' IDENTIFIED BY '123456';
赋予Azkaban用户增删改查权限
GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;
5)创建Azkaban表,完成后退出MySQL
mysql> use azkaban;
mysql> source /opt/module/azkaban/azkaban-db-3.84.4/create-all-sql-3.84.4.sql
mysql> quit;
6)更改MySQL包大小;防止Azkaban连接MySQL阻塞
sudo vim /etc/my.cnf
在[mysqld]下面加一行max_allowed_packet=1024M,修改以字节发送给服务器的最大数据包大小:
max_allowed_packet=1024M
7)重启MySQL
sudo systemctl restart mysqld
2.1.2 配置Executor Server
Azkaban Executor Server处理工作流和作业的实际执行。
1)编辑azkaban.properties
vim /opt/module/azkaban/azkaban-exec/conf/azkaban.properties
修改如下标红的属性
#...
default.timezone.id=Asia/Shanghai
#...
azkaban.webserver.url=http://hadoop102:8081
#...
database.type=mysql
mysql.port=3306
mysql.host=hadoop102
mysql.database=azkaban
mysql.user=azkaban
mysql.password=123456
mysql.numconnections=100
在最后添加
executor.port=12321
executor.metric.reports=true
executor.metric.milisecinterval.default=60000
2)编辑commonprivate.properties
vim /opt/module/azkaban/azkaban-exec/plugins/jobtypes/commonprivate.properties
添加
azkaban.native.lib=false
若不添加这个参数,在执行Job时会报错:
azkaban.utils.UndefinedPropertyException: Missing required property 'azkaban.native.lib'
at azkaban.utils.Props.getString(Props.java:450)
at azkaban.jobExecutor.ProcessJob.run(ProcessJob.java:242)
at azkaban.execapp.JobRunner.runJob(JobRunner.java:823)