资源规划

组件 LTSR003 LTSR005 LTSR006 LTSR007 LTSR008
OS ubuntu-x64 ubuntu-x64 ubuntu-x64 ubuntu-x64 ubuntu-x64
JDK jvm jvm jvm jvm jvm
Azkaban ExecutorServer ExecutorServer ExecutorServer ExecutorServer ExecutorServer/WebServer

安装介质

版本:azkaban-3.91.0
下载:https://github.com/azkaban/azkaban.git
安装:https://www.cnblogs.com/bujunpeng/p/9093124.html

部署模式

模式 名称 描述
solo-server 独立部署模式 使用内置h2存储元数据
two-server 两个服务器模式 1个webServer,1个execServer,在同一服务器上,使用mysql存储元数据
multiple-executor 多执行器模式 1个webServer,多个execServer分布在不同服务上,使用mysql存储元数据

构建

  1. cd ~/software
  2. git clone https://github.com/azkaban/azkaban.git
  3. cd azkaban
  4. ######################### 构建特定版本,否则将构建最新版 #########################
  5. # git tag -l -n # 查看所有tag
  6. # git branch -vv # 查看当前分支
  7. # git describe --abbrev=0 --tags # 查看当前分支对应tag
  8. # git checkout 3.84.0
  9. ######################### END #########################
  10. ./gradlew build -x test

如果构建过程特别慢或者下载失败,可以直接下载: gradle(https://services.gradle.org/distributions/gradle-4.6-all.zip) ,并放置于~/.gradle/wrapper/dists/gradle-.-all/*/下。(下载gradle的版本从~/software/azkaban/gradle/wrapper/gradle-wrapper.properties中查找)
可以通过给gradle添加国内源加快构建速度:

  1. cd ~/.gradle
  2. vi init.gradle

配置如下:

  1. allprojects{
  2. repositories {
  3. def ALIYUN_REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public'
  4. def ALIYUN_JCENTER_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
  5. all { ArtifactRepository repo ->
  6. if(repo instanceof MavenArtifactRepository){
  7. def url = repo.url.toString()
  8. if (url.startsWith('https://repo1.maven.org/maven2')) {
  9. project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
  10. remove repo
  11. }
  12. if (url.startsWith('https://jcenter.bintray.com/')) {
  13. project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
  14. remove repo
  15. }
  16. }
  17. }
  18. maven {
  19. url ALIYUN_REPOSITORY_URL
  20. url ALIYUN_JCENTER_URL
  21. }
  22. }
  23. }

每次重新开启构建过程前请清理之前的缓存:

rm -rf ~/.gradle/caches/build-cache-1/*
rm -rf ~/software/azkaban/.gradle/vcsWorkingDirs/*
./gradlew clean
./gradlew build -x test

查看构建版本:

for tar in ~/software/azkaban/azkaban-*/build/distributions/*.tar.gz;  do echo $tar; done

解压待用:

cd ~/software/azkaban
# 解压到当前目录(执行以下shell的目录)
for tar in ~/software/azkaban/azkaban-*/build/distributions/*.tar.gz;  do tar xvf $tar; done

元数据初始化

先将创建表语句拷贝到Mysql服务器。

cd ~/software/azkaban/azkaban-db-3.91.0-52-g0fc132f
scp create-all-sql-3.91.0-52-g0fc132f.sql bigdata@ltsr001:~/software

LTSR001执行。

# LTSR001(MySQL安装节点)
sudo su
mysql -uroot -p123456

创建azkaban库,azkaban用户密码,并赋予远程连接,并初始化元数据。

CREATE DATABASE azkabandb;
CREATE USER 'azkauser'@'%' IDENTIFIED BY 'azkauser';
CREATE USER 'azkauser'@'localhost' IDENTIFIED BY 'azkauser';
grant all privileges on azkabandb.* to 'azkauser'@'%' identified by 'azkauser';
grant all privileges on azkabandb.* to 'azkauser'@'localhost' identified by 'azkauser';
flush privileges;
-- 初始化元数据
use azkabandb;
source ~/software/azkaban/azkaban-db-3.91.0-52-g0fc132f/create-all-sql-3.91.0-52-g0fc132f.sql

MySQL相关参数配置:

sudo vi /etc/my.cnf

配置如下:

# 修改接受数据包大小,防止写入或更新失败(默认:1024/1KB,可用show VARIABLES like '%max_allowed_packet%';进行查看)
max_allowed_packet = 1024M

重启MySQL服务:

sudo  service mysql restart

安装Azkaban-web-server

根据资源规划,Azkaban-web-server将安装于LTSR008节点。

生成密钥对和证书

Keytool是java数据证书的管理工具,使用户能够管理自己的公/私钥对及相关证书。

参数 功能描述
-keystore 指定密钥库的名称及位置(产生的各类信息将存在.keystore文件中)
-genkey/-genkeypair 生成密钥对
-alias 为生成的密钥对定别名,如果没有默认是mykey
-keyalg 指定密钥的算法RSA/DSA,默认是DSA

执行命令如下:

cd ~/software/azkaban/azkaban-web-server-3.91.0-52-g0fc132f/
keytool -keystore keystore -alias jetty -genkey -keyalg RSA

操作过程如下:

[bigdata@ltsr008 azkaban-web-server-3.91.0-52-g0fc132f]$ keytool -keystore keystore -alias jetty -genkey -keyalg RSA
输入密钥库口令:  
再次输入新口令: 
您的名字与姓氏是什么?
  [Unknown]:  
您的组织单位名称是什么?
  [Unknown]:  
您的组织名称是什么?
  [Unknown]:  
您所在的城市或区域名称是什么?
  [Unknown]:  
您所在的省/市/自治区名称是什么?
  [Unknown]:  
该单位的双字母国家/地区代码是什么?
  [Unknown]:  
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正确?
  [否]:  y

输入 <jetty> 的密钥口令
    (如果和密钥库口令相同, 按回车):  

Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore keystore -destkeystore keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
[bigdata@ltsr008 azkaban-web-server-3.91.0-52-g0fc132f]$

配置azkaban.properties

vi ~/software/azkaban/azkaban-web-server-3.91.0-52-g0fc132f/conf/azkaban.properties

配置如下:

################## 个性化设置
# 服务器UI名称,用于服务器上方显示的名字(Unicode:龙通科技)
azkaban.name=\u9f99\u901a\u79d1\u6280
# 描述(Unicode:作业调度系统,http://www.bejson.com/convert/unicode_chinese)
azkaban.label=\u4f5c\u4e1a\u8c03\u5ea6\u7cfb\u7edf
# UI颜色
azkaban.color=#33ccff
# 默认Web文件目录
web.resource.dir=/home/bigdata/software/azkaban/azkaban-web-server-3.91.0-52-g0fc132f/web/
# 默认时区
default.timezone.id=Asia/Shanghai

################## 用户权限管理
user.manager.xml.file=/home/bigdata/software/azkaban/azkaban-web-server-3.91.0-52-g0fc132f/conf/azkaban-users.xml

################## Global配置
executor.global.properties=/home/bigdata/software/azkaban/azkaban-web-server-3.91.0-52-g0fc132f/conf/global.properties

################## MySQL配置
database.type=mysql
mysql.port=3306
mysql.host=LTSR001
mysql.database=azkabandb
mysql.user=azkauser
mysql.password=azkauser
mysql.numconnections=100

################## SSL配置
jetty.use.ssl=true
jetty.maxThreads=25
jetty.port=8081
jetty.ssl.port=8443
jetty.keystore=/home/bigdata/software/azkaban/azkaban-web-server-3.91.0-52-g0fc132f/keystore
jetty.password=000000
jetty.keypassword=000000
jetty.truststore=/home/bigdata/software/azkaban/azkaban-web-server-3.91.0-52-g0fc132f/keystore
jetty.trustpassword=000000

################## 邮件配置
mail.sender=450733605@qq.com
mail.host=smtp.qq.com
mail.user=450733605@qq.com
mail.password=ktzwkmykjrbpbjjc
job.failure.email=450733605@qq.com
job.success.email=450733605@qq.com

################## 执行器端口设置
executor.port=12321

注意:所有路径请配置为绝对路径。

添加管理员

vi ~/software/azkaban/azkaban-web-server-3.91.0-52-g0fc132f/conf/azkaban-users.xml

配置如下:

<azkaban-users>
    <user username="azkaban" password="azkaban" roles="admin" groups="azkaban"/>
    <user username="metrics" password="metrics" roles="metrics"/>
  <!-- 自定义管理员(lonton/lonton) -->
    <user username="lonton" password="lonton" roles="admin,metrics" />
    <role name="admin" permissions="ADMIN" />
    <role name="metrics" permissions="METRICS"/>
</azkaban-users>

安装Azkaban-exec-server

配置azkaban.properties

vi ~/software/azkaban/azkaban-exec-server-3.84.0/conf/azkaban.properties

配置如下:

################## 个性化设置
# 默认时区
default.timezone.id=Asia/Shanghai

################## Global配置
executor.global.properties=/home/bigdata/software/azkaban/azkaban-exec-server-3.91.0-52-g0fc132f/conf/global.properties

################## azkaban Web Server URL
azkaban.webserver.url=https://LTSR008:8443

################## 插件配置
azkaban.jobtype.plugin.dir=/home/bigdata/software/azkaban/azkaban-exec-server-3.91.0-52-g0fc132f/plugins/jobtypes

################## MySQL配置
database.type=mysql
mysql.port=3306
mysql.host=LTSR006
mysql.database=azkabandb
mysql.user=azkauser
mysql.password=azkauser
mysql.numconnections=100

################## 执行器端口设置
executor.port=12321

配置commonprivate.properties

vi ~/software/azkaban/azkaban-exec-server-3.84.0/plugins/jobtypes/commonprivate.properties

配置如下:

execute.as.user=false
azkaban.native.lib=false

分发

xsync ~/software/azkaban/azkaban-exec-server-*

启动验证

先启动executor,再启动web,避免Web Server会因为找不到执行器而启动失败。

  • 启动executor

    cd ~/software/azkaban/azkaban-exec-server-3.91.0-52-g0fc132f/bin
    # 启动
    ./start-exec.sh
    # 示例:LTSR008节点,激活executor
    curl http://LTSR008:12321/executor?action=activate
    curl http://LTSR003:12321/executor?action=activate
    curl http://LTSR005:12321/executor?action=activate
    curl http://LTSR006:12321/executor?action=activate
    curl http://LTSR007:12321/executor?action=activate
    # 停止
    ./shutdown-exec.sh
    
  • 启动Web Server

    cd ~/software/azkaban/azkaban-web-server-3.84.0/bin
    # 启动
    ./start-web.sh
    # 停止
    ./shutdown-web.sh
    
  • 验证服务

https://ltsr008:8443 (lonton/lonton)