轻量级的调度框架https://azkaban.readthedocs.io/en/latest/

架构

有一个web-server和一个exec-server,还有就是元数据库了。

web-server会把job定义存储到数据库中,exec-server会从数据库中拿任务信息执行并把状态写回去;

image.png

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

  1. * Where:
  2. Build file '/opt/soft/azkaban-4.0.0/az-flow-trigger-dependency-type/kafka-event-trigger/build.gradle' line: 51
  3. * What went wrong:
  4. Could not determine the dependencies of task ':az-flow-trigger-dependency-type:kafka-event-trigger:fatJar'.
  5. > Could not resolve all dependencies for configuration ':az-flow-trigger-dependency-type:kafka-event-trigger:compile'.
  6. > Could not determine artifacts for org.apache.zookeeper:zookeeper:3.4.9: Skipped due to earlier error
  7. * Try:
  8. 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.
  9. * Get more help at https://help.gradle.org

https://www.jianshu.com/p/9d3e07be2097
然后参考简书的这篇文章解决了build的问题,是证书的问题。

  1. 1)安装 ca-certificates yum install ca-certificates
  2. 2)更新本地证书库: update-ca-trust -h
  3. update-ca-trust check
  4. 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
image.png

  1. restliGenerator : 'com.linkedin.pegasus:generator:' + versions.restli,
  2. restliServer : 'com.linkedin.pegasus:restli-server:' + versions.restli,
  3. 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一下。

image.png

最终编译成功的文件在这些路径中。

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配置默认的)。
image.png