Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。
Azkaban定义了一种KV文件(properties)格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
官网 : https://azkaban.github.io/
下载
wget https://github.com/azkaban/azkaban/archive/refs/tags/3.73.0.tar.gz
tar -zxvf 3.73.0.tar.gz
mv azkaban-3.73.0 azkaban-src
安装Git
yum ‐y install git
yum ‐y install gcc‐c++
[root@administrator program]# git version
git version 1.8.3.1
修改azkaban-src目录下的build.gradle文件,修改allprojects节点配置,指定仓库地址为阿里云仓库
allprojects {
apply plugin: 'jacoco'
repositories {
maven {
url 'https://maven.aliyun.com/repository/public/'
}
mavenLocal()
mavenCentral()
}
}
开始编译、安装并跳过测试阶段
cd azkaban/
./gradlew build installDist -x test
最后编译成功
BUILD SUCCESSFUL in 4m 52s
82 actionable tasks: 76 executed, 6 from cache
编译后得到以下文件
# azkaban-web-server页面显示服务
[root@administrator azkaban-src]# ls azkaban-web-server/build/distributions/
azkaban-web-server-0.1.0-SNAPSHOT.tar.gz azkaban-web-server-0.1.0-SNAPSHOT.zip
# azkaban-solo-server
[root@administrator azkaban-src]# ls azkaban-solo-server/build/distributions/
azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz azkaban-solo-server-0.1.0-SNAPSHOT.zip
# azkaban-exec-server任务执行服务
[root@administrator azkaban-src]# ls azkaban-exec-server/build/distributions/
azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz azkaban-exec-server-0.1.0-SNAPSHOT.zip
# two server模式需要的C程序
[root@administrator azkaban-src]# ls az-exec-util/src/main/c
execute-as-user.c
# 数据库脚本
[root@administrator azkaban-src]# ll azkaban-db/build/install/azkaban-db/
总用量 112
-rw-r--r-- 1 root root 12022 3月 12 13:33 create-all-sql-0.1.0-SNAPSHOT.sql
Azkaban的单服务模式使用的是一个单节点模式来进行启动服务,只需要启动安装包即可,所有数据保存在H2内存中。
azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz
解压azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz
tar -zxvf azkaban-solo-server/build/distributions/azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz -C ../azkaban
[root@administrator azkaban]# ls
azkaban-solo-server-0.1.0-SNAPSHOT
修改vim azkaban-solo-server-0.1.0-SNAPSHOT/conf/azkaban.properties
文件,保证与Linxu服务器时区一致
#default.timezone.id=America/Los_Angeles
default.timezone.id=Asia/Shanghai
修改vim azkaban-solo-server-0.1.0-SNAPSHOT/plugins/jobtypes/commonprivate.properties
文件
# set execute-as-user
execute.as.user=false
# Azkaban对内存要求高,关闭内存检查
memCheck.enabled=false
cd azkaban-solo-server-0.1.0-SNAPSHOT/
bin/start-solo.sh
[root@administrator azkaban-solo-server-0.1.0-SNAPSHOT]# jps
22563 AzkabanSingleServer
浏览器访问:IP:8081
登陆,用户名与密码:azkaban
创建 Job 描述文件 vim test.job
type=command
command=echo "hello world"
创建一个项目
将test.job
job资源文件打包成test.zip
zip文件,并上传
启动执行job
azkaban-web-server-0.1.0-SNAPSHOT.tar.gz
azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
create-all-sql-0.1.0-SNAPSHOT.sql
execute-as-user.c
CREATE DATABASE azkaban;
CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';
GRANT all privileges ON azkaban.* to 'azkaban'@'%' identified by 'azkaban' WITH GRANT OPTION;
flush privileges;
use azkaban;
source /usr/local/program/azkaban-src/azkaban-db/build/install/azkaban-db/create-all-sql-0.1.0-SNAPSHOT.sql
tar -zxvf azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C ../azkaban
tar -zxvf azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -C ../azkaban
[root@administrator azkaban]# ls
azkaban-exec-server-0.1.0-SNAPSHOT azkaban-solo-server-0.1.0-SNAPSHOT azkaban-web-server-0.1.0-SNAPSHOT
安装SSL安全认证,允许使用https的方式访问azkaban的web服务
[root@administrator azkaban]# keytool -keystore keystore -alias keyalias -genkey -keyalg RSA
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]:
您的组织单位名称是什么?
[Unknown]:
您的组织名称是什么?
[Unknown]:
您所在的城市或区域名称是什么?
[Unknown]:
您所在的省/市/自治区名称是什么?
[Unknown]:
该单位的双字母国家/地区代码是什么?
[Unknown]:
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正确?
[否]: y
输入 <keyalias> 的密钥口令
(如果和密钥库口令相同, 按回车):
Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore keystore -destkeystore keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
[root@administrator azkaban]# ls
azkaban-exec-server-0.1.0-SNAPSHOT azkaban-solo-server-0.1.0-SNAPSHOT azkaban-web-server-0.1.0-SNAPSHOT keystore
安装azkaban web server
,进入cd azkaban-web-server-0.1.0-SNAPSHOT/conf
编辑 vim azkaban.properties
#default.timezone.id=America/Los_Angeles
default.timezone.id=Asia/Shanghai
#jetty.use.ssl=false
jetty.use.ssl=true
# ssl配置
jetty.ssl.port=8443
jetty.keystore=/usr/local/program/azkaban/keystore
jetty.password=azkaban
jetty.keypassword=azkaban
jetty.truststore=/usr/local/program/azkaban/keystore
jetty.trustpassword=azkaban
# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
#azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
azkaban.activeexecutor.refresh.milisecinterval=10000
azkaban.queueprocessing.enabled=true
azkaban.activeexecutor.refresh.flowinterval=10
azkaban.executorinfo.refresh.maxThreads=10
安装azkaban executor server
,进入cd azkaban-exec-server-0.1.0-SNAPSHOT/conf
编辑vim azkaban.properties
#default.timezone.id=America/Los_Angeles
default.timezone.id=Asia/Shanghai
#jetty.use.ssl=false
jetty.use.ssl=true
# ssl配置
jetty.ssl.port=8443
jetty.keystore=/usr/local/program/azkaban/keystore
jetty.password=azkaban
jetty.keypassword=azkaban
jetty.truststore=/usr/local/program/azkaban/keystore
jetty.trustpassword=azkaban
# Where the Azkaban web server is located
#azkaban.webserver.url=http://localhost:8081
azkaban.webserver.url=http://localhost:8443
# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
添加插件
将编译后的C文件execute-as-user.c拷贝到azkaban-exec-server-0.1.0-SNAPSHOT/plugins/jobtypes目录
cp az-exec-util/src/main/c/execute-as-user.c /usr/local/program/azkaban/azkaban-exec-server-0.1.0-SNAPSHOT/plugins/jobtypes
生成execute-as-user
cd azkaban-exec-server-0.1.0-SNAPSHOT/plugins/jobtypes
[root@administrator jobtypes]# yum -y install gcc-c++
[root@administrator jobtypes]# gcc execute-as-user.c -o execute-as-user
[root@administrator jobtypes]# ls
commonprivate.properties execute-as-user execute-as-user.c
[root@administrator jobtypes]# chown root execute‐as‐user
[root@administrator jobtypes]# chmod 6050 execute-as-user
[root@administrator jobtypes]# ll
总用量 24
-rw-rw-r-- 1 root root 44 5月 31 2019 commonprivate.properties
---Sr-s--- 1 root root 13536 3月 12 15:33 execute-as-user
-rw-r--r-- 1 root root 3976 3月 12 15:30 execute-as-user.c
修改配置文件
vim commonprivate.properties
# set execute-as-user
execute.as.user=false
# 关闭内存检测
memCheck.enabled=false
# 指定插件存放目录
azkaban.native.lib=/usr/local/program/azkaban/azkaban-exec-server-0.1.0-SNAPSHOT/plugins/jobtypes
启动azkaban exec server
cd azkaban-exec-server-0.1.0-SNAPSHOT
bin/start-exec.sh
[root@administrator azkaban-src]# jps
24655 AzkabanExecutorServer
# 当azkaban-exec-server-0.1.0-SNAPSHOT目录下出现executor.port文件,说明启动成功
[root@administrator azkaban-exec-server-0.1.0-SNAPSHOT]# ls
bin conf currentpid executions executor.port executorServerLog__2022-03-12+15:57:50.out lib logs plugins projects temp
激活exec-server
[root@administrator azkaban-exec-server-0.1.0-SNAPSHOT]# curl -G "node01:$(<./executor.port)/executor?action=activate" && echo
{"status":"success"}
启动azkaban-web-server
cd azkaban-web-server-0.1.0-SNAPSHOT/
bin/start-web.sh
[root@administrator azkaban-src]# jps
11146 AzkabanWebServer
浏览器访问IP:8443
注意:放行端口or关闭防火墙
systemctl stop firewalld.service
将单服务模式下的Job资源上传进行测试
1.单一Job的使用
1.创建 Job 描述文件
2.将job资源文件打包成zip文件
3.创建工程并上传zip压缩包
4.启动工作流flow,执行job
创建 Job 描述文件 vim test.job
type=command
command=echo "hello world"
2.多Job的使用
1.创建有依赖关系的多个job描述
2.将所有job资源文件打到一个zip包中
3.创建工程并上传zip压缩包
4.启动工作流flow,执行job
创建 Job 描述文件 vim test1.job
type=command
command=echo "test1 hello world"
创建 Job 描述文件 vim test2.job
type=command
command=echo "test2 hello world"
dependencies=test1
上传后执行时显示依赖关系
执行过程与结果
Azkaban的scheduler功能可以实现对作业任务进行定时调度功能
1.创建job描述文件
2.将job资源文件打包成zip文件
3.创建project并上传job压缩包
4.启动执行该job
vim hdfs.job
type=command
command=/usr/local/program/hadoop/bin/hdfs dfs -mkdir /azkaban
执行后查看HDFS
[root@administrator hadoop]# hdfs dfs -ls /
Found 6 items
drwxr-xr-x - root supergroup 0 2022-03-12 18:37 /azkaban
1.下载/usr/local/program/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.2.jar
文件
2.创建job描述文件 vim mr.job
type=command
command=/usr/local/program/hadoop/bin/hadoop jar hadoop-mapreduce-examples-3.3.2.jar pi 3 5
3.将所有job资源文件( vim mr.job
、hadoop-mapreduce-examples-3.3.2.jar
)打到一个zip压缩包中
4.创建工程并上传zip包,启动job
1.准备Hive脚本: hive.sql
create database if not exists dbazkaban;
use dbazkaban;
create table if not exists tbazkaban(id string,name string) row format
delimited fields terminated by '\t';
2.创建job描述文件 hive.job
type=command
command=/usr/local/program/hive/bin/hive -f 'hive.sql'
3.将所有job资源文件打到一个zip包中
4.创建工程并上传zip包,启动job