轻量级的调度框架https://azkaban.readthedocs.io/en/latest/
架构
有一个web-server和一个exec-server,还有就是元数据库了。
web-server会把job定义存储到数据库中,exec-server会从数据库中拿任务信息执行并把状态写回去;
azkaban4.0部署
下载https://github.com/azkaban/azkaban/releases/tag/4.0.0
源码编译
下载后解压缩。
https://blog.csdn.net/chenxi5404/article/details/120512109
azkaban是依赖于gradle进行包管理的,其下载之后也提供了gradle,就在源码目录下。./gradlew build installDist -x test
build时的报错
Could not determine the dependencies of task
* Where:
Build file '/opt/soft/azkaban-4.0.0/az-flow-trigger-dependency-type/kafka-event-trigger/build.gradle' line: 51
* What went wrong:
Could not determine the dependencies of task ':az-flow-trigger-dependency-type:kafka-event-trigger:fatJar'.
> Could not resolve all dependencies for configuration ':az-flow-trigger-dependency-type:kafka-event-trigger:compile'.
> Could not determine artifacts for org.apache.zookeeper:zookeeper:3.4.9: Skipped due to earlier error
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
https://www.jianshu.com/p/9d3e07be2097
然后参考简书的这篇文章解决了build的问题,是证书的问题。
(1)安装 ca-certificates :yum install ca-certificates
(2)更新本地证书库: update-ca-trust -h
update-ca-trust check
update-ca-trust enable
然后重新build
Could not find com.linkedin.pegasus:restli-tools:28.3.11.
https://blog.csdn.net/wangqinyi574110/article/details/118199988
因为有三个jar包在中央仓库中找不到,因此,手动将其从versions.restli改为27.7.18
restliGenerator : 'com.linkedin.pegasus:generator:' + versions.restli,
restliServer : 'com.linkedin.pegasus:restli-server:' + versions.restli,
restliTools : 'com.linkedin.pegasus:restli-tools:' + versions.restli,
然后在自己的数据库上创建数据库azkaban和建立用户和授权;
编译成功之后,在azkaban-4.0.0/azkaban-db/build/sql
目录下会有create-all-sql-0.1.0-SNAPSHOT.sql
文件,把这个文件在数据库中source一下。
最终编译成功的文件在这些路径中。
azkaban-4.0.0/azkaban-exec-server/build/distributions
azkaban-4.0.0/azkaban-solo-server/build/distributions
azkaban-4.0.0/azkaban-web-server/build/distributions
azkaban-4.0.0/azkaban-db/build/distributions
首先把distributions中的tar包拿出来,然后找个目录放。我这边把azkaban-web-server单拉出来之后,执行命令创建证书keytool -keystore my_azkaban -alias az_alias -genkey -keyalg RSA
配置
azkaban-web-server配置
azkaban.properties
文件在conf/目录下
首先把相对路径的都改为绝对路径,避免启动的时候不在当前目录时的报错,实际上不改也行,记住下次启动要在当前目录启。
修改时区default.timezone.id=Asia/Shanghai
找到mysql后,配置数据库信息。
找到jetty之后,配置ca信息
jetty.keystore=/path/to/keystore #这里是提供服务端的证书
jetty.password=xxx
jetty.keypassword=xxxx
jetty.truststore=/path/to/trusted_keystore #这里是要信任客户端的证书
jetty.trustpassword=xxx
azkaban-users.xml
权限管理
这里我增加了一个admin的用户和admin的密码。
azkaban-exec-server配置
azkaban.properties
文件在conf/目录下
首先把相对路径的都改为绝对路径,避免启动的时候不在当前目录时的报错,实际上不改也行,记住下次启动要在当前目录启。
修改时区default.timezone.id=Asia/Shanghai
找到mysql后,配置数据库信息。
我这里的默认jetty端口都是8081,且默认ssl是关闭的,实际上上面的keytool生成证书实际上没有用到
启动
先启动exec-server
在exec-server目录下执行bin/start-exec.sh
激活
不知道为啥有这么一步
在exec-server目录下执行curl -G "http://hostname:$(<./executor.port)/executor?action=activate"&&echo
会有一个返回信息打印出来
{"status":"success"}
启动web-server
到web-server目录下执行bin/start-web.sh
然后,就可以访问web了,通过8081端口(jetty配置默认的)。