一、Azkaban概述
1、为什么需要工作流调度系统
1)一个完整的数据分析系统通常都是由大量任务单元组成:Shell 脚本程序,Java 程序,MapReduce 程序、Hive 脚本等2)各任务单元之间存在时间先后及前后依赖关系3)为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行;
我们可能有这样一个需求,某个业务系统每天产生20G原始数据,我们每天都要对其进行处理,处理步骤如下所示: (1)通过Hadoop先将原始数据同步到HDFS上; (2)借助MapReduce计算框架对原始数据进行计算,生成的数据以分区表的形式存储到多张Hive表中; (3)需要对Hive中多个表的数据进行JOIN处理,得到一个明细数据Hive大表; (4)将明细数据进行复杂的统计分析,得到结果报表信息; (5)需要将统计分析得到的结果数据同步到业务系统中,供业务调用使用
2、 常见工作流调度系统
1)简单的任务调度:直接使用 Linux 的 Crontab 来定义;2)复杂的任务调度:开发调度平台或使用现成的开源调度系统,比如 Ooize、Azkaban、Airflow、DolphinScheduler 等。
3、Azkaban 与 Oozie 对比
总体来说,Ooize 相比 Azkaban 是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。如果可以不在意某些功能的缺失,轻量级调度器 Azkaban 是很不错的候选对象。
二、Azkaban安装步骤
1、上传 压缩包包
1)将 azkaban-db-3.84.4.tar.gz,azkaban-exec-server-3.84.4.tar.gz,azkaban-web-server-3.84.4.tar.gz 上传到 hadoop100 的/usr/local/soft/ 路径下
2)新建/usr/local/soft/azkaban 目录,并将所有 tar 包解压到这个目录下
mkdir /usr/local/soft/azkaban
3)解压 azkaban-db-3.84.4.tar.gz、 azkaban-exec-server-3.84.4.tar.gz 和 azkaban-web-server-3.84.4.tar.gz 到/usr/local/soft/azkaban 目录下
cd /usr/local/soft
tar -zxvf azkaban-db-3.84.4.tar.gz -C /usr/local/soft/azkaban/
tar -zxvf azkaban-exec-server-3.84.4.tar.gz -C /usr/local/soft/azkaban/
tar -zxvf azkaban-web-server-3.84.4.tar.gz -C /usr/local/soft/azkaban/
4) 进入到/usr/local/soft/azkaban 目录,依次修改名称
cd /usr/local/soft/azkaban
mv azkaban-exec-server-3.84.4/ azkaban-exec
mv azkaban-web-server-3.84.4/ azkaban-web
2、 启动MySql、创建账户
MySQL版本:8.0.15,部署省略(有需要参考相关部署文档)
1) 启动 MySQL并登录
mysql -u root -proot123
2) 创建 Azkaban 数据库
create database azkaban;
3)创建 azkaban 用户并赋予权限
-
设置密码有效长度 4 位及以上
mysql> set global validate_password.length = 4;
-
设置密码策略最低级别
mysql> set global validate_password.policy=0;
-
创建 Azkaban 用户,任何主机都可以访问 Azkaban,密码是 azkaban
mysql> CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';
-
赋予 Azkaban 用户增删改查权限
GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to'azkaban'@'%' WITH GRANT OPTION; flush PRIVILEGES; # 刷新权限
4) 创建 Azkaban 表,完成后退出 MySQL
mysql> use azkaban;
mysql> source /usr/local/soft/azkaban/azkaban-db-3.84.4/create-all-sql-3.84.4.sql;
mysql> quit;
5)更改 MySQL 包大小;防止 Azkaban 连接 MySQL 阻塞
vim /etc/my.cnf
在[mysqld]下面加一行 max_allowed_packet=1024M
[mysqld]
max_allowed_packet=1024M
重启 MySQL
systemctl restart mysqld
3、系统环境变量配置
vi /etc/profile
添加如下内容:
export AZKABAN_HOME=/usr/local/soft/azkaban/
export PATH=$PATH:$AZKABAN_HOME/azkaban-web/bin
export PATH=$PATH:$AZKABAN_HOME/azkaban-exec/bin
使得环境变量生效
source /etc/profile
4、配置 Executor Server
Azkaban Executor Server 处理工作流和作业的实际执行。
编辑 azkaban.properties
vim /usr/local/soft/azkaban/azkaban-exec/conf/azkaban.properties
修改如下属性
#...
default.timezone.id=Asia/Shanghai
#...
azkaban.webserver.url=http://hadoop100:8091
#...
database.type=mysql
mysql.port=3306
mysql.host=hadoop100
mysql.database=azkaban?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
executor.port=12321 #最后一行新增内容
完整内容如下:
# Azkaban Personalization Settings
azkaban.name=Test
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=web/
default.timezone.id=Asia/Shanghai
# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=conf/azkaban-users.xml
# Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.use.ssl=false
jetty.maxThreads=25
jetty.port=8081
# Where the Azkaban web server is located
azkaban.webserver.url=http://hadoop100:8091
# mail settings
mail.sender=
mail.host=
# User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users.
# enduser -> myazkabanhost:443 -> proxy -> localhost:8081
# when this parameters set then these parameters are used to generate email links.
# if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used.
# azkaban.webserver.external_hostname=myazkabanhost.com
# azkaban.webserver.external_ssl_port=443
# azkaban.webserver.external_port=8081
job.failure.email=
job.success.email=
lockdown.create.projects=false
cache.directory=cache
# JMX stats
jetty.connector.stats=true
executor.connector.stats=true
# Azkaban plugin settings
azkaban.jobtype.plugin.dir=plugins/jobtypes
# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=hadoop100
mysql.database=azkaban?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
executor.port=12321
# Azkaban Executor settings
executor.maxThreads=50
executor.flow.threads=30
更换/usr/local/soft/azkaban/azkaban-exec/lib目录下的连接MySQL驱动包为
删除原有mysql-connector-java-5.1.28.jar,添加mysql-connector-java-8.0.15.jar
在MySQL命令窗口中切换到mysql数据库,执行如下内容:
show variables like '%time_zone%';
select now(); #查询当前时间
set global time_zone = '+8:00';
set time_zone = '+8:00';
flush privileges;
select now(); #查询当前时间
进入到/ usr/local/soft/azkaban/azkaban-exec 路径启动executorserver
cd /usr/local/soft/azkaban/azkaban-exec
bin/start-exec.sh
jps
关闭
shutdown-exec.sh
下面激活 executor
curl -G "hadoop100:12321/executor?action=activate" && echo
如果出现如下提示,则表示激活成功
{"status":"success"}
注:以上必须激活,如果使用过程中更新配置文件内容,也需要激活一下
5、配置 Web Server
Azkaban Web Server 处理项目管理,身份验证,计划和执行触发。1)编辑hadoop100中 azkaban.properties
vim /usr/local/soft/azkaban/azkaban-web/conf/azkaban.properties
修改如下属性
...
default.timezone.id=Asia/Shanghai
...
jetty.port=8091 #默认8081,防止冲突改成8091
...
database.type=mysql
mysql.port=3306
mysql.host=hadoop100
mysql.database=azkaban?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
...
azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus
完整文件
# Azkaban Personalization Settings
azkaban.name=Test
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=web/
default.timezone.id=Asia/Shanghai
# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=conf/azkaban-users.xml
# Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.use.ssl=false
jetty.maxThreads=25
jetty.port=8091
# Azkaban Executor settings
# mail settings
mail.sender=
mail.host=
# User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users.
# enduser -> myazkabanhost:443 -> proxy -> localhost:8081
# when this parameters set then these parameters are used to generate email links.
# if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used.
# azkaban.webserver.external_hostname=myazkabanhost.com
# azkaban.webserver.external_ssl_port=443
# azkaban.webserver.external_port=8081
job.failure.email=
job.success.email=
lockdown.create.projects=false
cache.directory=cache
# JMX stats
jetty.connector.stats=true
executor.connector.stats=true
# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=hadoop100
mysql.database=azkaban?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
#Multiple Executor
azkaban.use.multiple.executors=true
azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus
azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1
azkaban.executorselector.comparator.Memory=1
azkaban.executorselector.comparator.LastDispatched=1
azkaban.executorselector.comparator.CpuUsage=1
说明:
StaticRemainingFlowSize:正在排队的任务数;
CpuStatus:CPU 占用情况
MinimumFreeMemory :内存占用情况 。 测试环境, 必须将 MinimumFreeMemory 删除掉, 否则它会认为集群资源不够,不执行。
更换/usr/local/soft/azkaban/azkaban-web/lib目录下的连接MySQL驱动包为mysql-connector-java-8.0.15.jar,删除原有mysql-connector-java-5.1.28.jar
修改 azkaban-users.xml 文件,添加 soft863用户
vim /usr/local/soft/azkaban/azkaban-web/conf/azkaban-users.xml
<azkaban-users>
<user groups="azkaban" password="azkaban" roles="admin"
username="azkaban"/>
<user password="metrics" roles="metrics" username="metrics"/>
<user password="soft863" roles="admin" username="soft863"/>
<role name="admin" permissions="ADMIN"/>
<role name="metrics" permissions="METRICS"/>
</azkaban-users>
必须进入到 hadoop100的/usr/local/soft/azkaban/azkaban-web 路径,启动 web server
cd /usr/local/soft/azkaban/azkaban-web
bin/start-web.sh
关闭
shutdown-web.sh
三、访问网页
访问 http://hadoop100:8091,并用 soft863用户登陆