Azkaban是一款基于Java编写的任务调度系统
任务调度
任务调度:有四个任务脚A、B、C、D,其中任务A与任务B可以并行运行,然后任务C依赖任务A和任务B的运行结果,任务D依赖任务C的运行结果,此时整个过程可以等效为一个有向无环图,而给所有的任务运行定一个运行规则就可以理解为任务调度
ankaban目前最新版本是3.x,没有二进制包,需要对源码进行build后再使用
source地址:点击下载
下载后执行构建命令
打包为tar.gz包
./gradlew distTar
或打包为zip包
./gradlew distZip
用gradle构建,构建的时候如果没有安装gradle,会自动先下载gradle,然后会构建
构建后进入azkaban-web-server/build/distributions/中,该目录下是构建后的包azkaban-web-server-0.1.0-SNAPSHOT.zip
同样进入azkaban-exec-server/build/distributions/中,该目录下是构建后的包azkaban-exec-server-0.1.0-SNAPSHOT.zip
同样进入azkaban-sql/build/distributions/中,该目录下是构建后的包azkaban-sql-0.1.0-SNAPSHOT.zip
解压上面三个包,进行配置后就可以使用了
安装MySQL:因为azkaban的数据存储在MySQL中,所以需要安装MySQL,我已经安装了MySQL,这里不做介绍了
创建azkaban数据库
在MySQL终端执行
create database azkaban;
创建用户azkaban
CREATE USER 'azkaban'@'localhost' identified by '123456';
授于azkaban用户权限
GRANT ALL ON azkaban.* to 'azkaban'@'localhost';
然后创建表,这里使用azkaban-sql-0.1.0-SNAPSHOT.zip解压后的create-all-sql-0.1.0-SNAPSHOT.sql脚本
在MySQL终端执行
source create-all-sql-0.1.0-SNAPSHOT.sql;
配置参数
从源码build后azkaban-web-server目录下只有4个文件夹
没有conf目录,解决办法,从azkaban-soloserver目录下拷贝conf到azkaban-web-serber下
conf配置文件
azkaban.properties
#Azkaban Personalization Settings
azkaban.name=BigData
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
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban3
mysql.user=azkaban
mysql.password=123456
mysql.numconnections=100
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.maxThreads=25
jetty.ssl.port=8443
jetty.port=8081
jetty.keystore=key/keystore
jetty.password=123456
jetty.keypassword=123456
jetty.truststore=key/truststore
jetty.trustpassword=123456
# Azkaban Executor settings
executor.port=12321
# mail settings
mail.sender=
mail.host=
job.failure.email=
job.success.email=
lockdown.create.projects=false
cache.directory=cache
主要配置项
default.timezone.id=Asia/Shanghai #将时区改为上海
database.type=mysql #数据库类型为mysql
mysql.port=3306
mysql.host=localhost #mysql的主机地址
mysql.database=azkaban #数据库名称,之前创建好的
mysql.user=azkaban #数据库用户名,之前创建的
mysql.password=123456 #数据库密码,之前创建的
mysql.numconnections=100 #最大连接数,默认
jetty.maxThreads=25
jetty.ssl.port=8443
jetty.port=8081
jetty.keystore=key/keystore #改为key-tool生成的keystore
jetty.password=123456 #key-tool设置的密码
jetty.keypassword=123456
jetty.truststore=key/truststore #改为key-tool生成的trusttore
jetty.trustpassword=123456 #key-tool设置的密码
配置key-tool
>keytool -keystore keystore -alias jetty -genkey -keyalg RSA
在提示中输入密码123456(上面设置的)
最后一路回车会生成两个文件 keystore,truststore
我将他们放在azkaban-web-server下的key目录
在azkaban-web-server目录下执行
bin/azkaban-web-start.sh
启动azkaban-exec-server
在azkaban-exec-server目录下执行
bin/azkaban-executor-start.sh
停止azkaban-web-server
bin/azkaban-web-shutdown.sh
如果启动时报错java.lang.StackOverflowError thrown from the UncaughtExceptionHandler in thread "main"
,需要在conf目录下创建log4j.properties日志文件
问azkaban
https://localhost:8443/
登录密码:azkaban/azkaban
用户可以在conf/azkaban_user.xml中添加
<azkaban-users>
<user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
<user username="metrics" password="metrics" roles="metrics"/>
<role name="admin" permissions="ADMIN" />
<role name="metrics" permissions="METRICS"/>
azkaban-users>