Azkaban调度引擎 - wtdig/study GitHub Wiki
Azkaban是一套简单的任务调度服务,整体包括三部分webserver、dbserver、executorserver。
Azkaban是linkin的开源项目,开发语言为Java。
Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。
Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
实际当中经常有这些场景:每天有一个大任务,这个大任务可以分成A,B,C,D四个小任务,A,B任务之间没有依赖关系,C任务依赖A,B任务的结果,
D任务依赖C任务的结果。一般的做法是,开两个终端同时执行A,B,两个都执行完了再执行C,最后再执行D。这样的话,整个的执行过程都需要人工参加,
并且得盯着各任务的进度。但是我们的很多任务都是在深更半夜执行的,通过写脚本设置crontab执行。其实,整个过程类似于一个有向无环图(DAG)。
每个子任务相当于大任务中的一个流,任务的起点可以从没有度的节点开始执行,任何没有通路的节点之间可以同时执行,比如上述的A,B。
总结起来的话,我们需要的就是一个工作流的调度器,而azkaban就是能解决上述问题的一个调度器。
mkdir azkaban
cd azkaban
wget wget https://github.com/azkaban/azkaban/archive/3.73.0.tar.gz
chmod 777 3.73.0.tar.gz
tar -zxvf 3.73.0.tar.gz
各版本网址:https://services.gradle.org/distributions/
下载gradle;
mkdir gradle
wget https://services.gradle.org/distributions/gradle-5.6-bin.zip
配置环境属性
unzip gradle-5.6-bin.zip
配置环境变量
vim /etc/profile
刷新环境配置
source /etc/profile
检查是否安装成功
gradle --version
cd azkaban-3.73.0
跳过测试
./gradlew build installDist -x test
报错:
Could not find Linker 'g++' in system path.
安装g++
sudo yum install g++
sudo yum install -y gcc-c++*
再次执行./gradlew build installDist -x test
备注:下载速度慢,可以修改镜像
添加镜像到下面2个地方:
buildscript{
repositories{
mavenLocal()
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
maven{ url 'http://maven.oschina.net/content/groups/public/'}
}
}
allprojects {
repositories{
mavenLocal()
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
maven{ url 'http://maven.oschina.net/content/groups/public/'}
mavenCentral()
}
}
将
azkaban/azkaban-3.73.0/azkaban-solo-server/build/distributions/azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz
azkaban/azkaban-3.73.0/azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz
azkaban/azkaban-3.73.0/azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
复制到azkaban 目录下,解压,目录结构如下
复制指令 -r 包含所有子目录
cp -r
[root@master azkaban]# ls
3.73.0.tar.gz azkaban-exec-server-0.1.0-SNAPSHOT azkaban-web-server-0.1.0-SNAPSHOT executor gradle-5.6 keystore web
azkaban-3.73.0 azkaban-solo-server-0.1.0-SNAPSHOT dp gradle gradle-5.6-bin.zip solo
azkaban/azkaban-3.73.0/azkaban-db/build/sql/create-all-sql-0.1.0-SNAPSHOT.sql
创建mysql 的数据库 azkaban,执行sql语句,初始化数据库
再azkaban目录下
执行keytool -keystore keystore -alias jetty -genkey -keyalg RSA
本次设置的密码为:wtdig123
遇到这一行:(RETURN if same as keystore password):
直接enter键即可
[root@master azkaban]# keytool -keystore keystore -alias jetty -genkey -keyalg RSA
Enter keystore password:
Keystore password is too short - must be at least 6 characters
Enter keystore password:
Keystore password is too short - must be at least 6 characters
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]: wt
What is the name of your organizational unit?
[Unknown]: redstar^H^H^H^[[3~
What is the name of your organization?
[Unknown]: red
What is the name of your City or Locality?
[Unknown]: sh
What is the name of your State or Province?
[Unknown]: sh
What is the two-letter country code for this unit?
[Unknown]: sh
Is CN=wt, OU=reds, O=red, L=sh, ST=sh, C=sh correct?
[no]: y
Enter key password for <jetty>
(RETURN if same as keystore password):
You have mail in /var/spool/mail/root
[root@master azkaban]# ls
3.73.0.tar.gz azkaban-3.73.0 dp executor gradle gradle-5.6 gradle-5.6-bin.zip keystore solo web
配置核心文件:
azkaban-solo-server-0.1.0-SNAPSHOT/conf/azkaban.properties
# 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=America/Los_Angeles
# 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
database.type=mysql
mysql.port=3306
mysql.host=192.168.119.84
mysql.database=azkaban
mysql.user=admin
mysql.password=admin123
mysql.numconnections=100
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.use.ssl=true
jetty.maxThreads=25
jetty.ssl.port=8666
jetty.port=8081
jetty.keystore=../keystore
jetty.password=wtdig123
jetty.keypassword=wtdig123
jetty.truststore=../keystore
jetty.trustpassword=wtdig123
# Azkaban Executor settings
executor.port=12321
# 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
# Number of executions to be displayed
azkaban.display.execution_page_size=16
azkaban.use.multiple.executors=true
主要配置是数据库驱动和证书认证
数据库配置:
database.type=mysql
mysql.port=3306
mysql.host=192.168.119.84
mysql.database=azkaban
mysql.user=admin
mysql.password=admin123
mysql.numconnections=100
证书配置:
jetty.use.ssl=true
jetty.maxThreads=25
jetty.ssl.port=8666
jetty.port=8081
jetty.keystore=../keystore
jetty.password=wtdig123
jetty.keypassword=wtdig123
jetty.truststore=../keystore
jetty.trustpassword=wtdig123
配置:azkaban-users.xml
<azkaban-users>
<user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/>
<user password="metrics" roles="metrics" username="metrics"/>
<user password="wtdig123" roles="metrics" username="lean"/>
<role name="admin" permissions="ADMIN"/>
<role name="metrics" permissions="METRICS"/>
</azkaban-users>
添加自定义用户:
<user password="wtdig123" roles="metrics" username="lean"/>
在本机的 /etc/hosts 文件中添加本机IP地址的映射 [root@master azkaban]
/etc/hosts
127.0.0.1 master
azkaban-solo-server-0.1.0-SNAPSHOT目录,在这个目录下启动solo:
注意不要进入bin目录后去运行./azkaban-solo-start.sh,否则会报 Cannot find 'database.properties' file in /mywork/azkaban/azkaban-solo-server-0.1.0-SNAPSHOT/bin/sql/database.properties等一系列错误
执行jps,查看是否有该进程
如果没有,去目录下,看日志信息
8)、将上面的azkaban.properties和azkaban-users.xml复制到azkaban-web-server-0.1.0-SNAPSHOT和azkaban-exec-server-0.1.0-SNAPSHOT的conf目录下
如何安装上面的步骤执行
本次为:192.168.119.81:8666
登录账号和密码为以上配置的
lean
wtdig123