Azkaban部署和配置

文章目录

1.安装部署

1.1.下载源码

https://github.com/azkaban/azkaban/tags

1.2.解压源码:
tar -zxf azkaban-3.85.1.tar.gz -C /opt/soft
1.3.编译源码

需要安装git, java环境

# Build Azkaban
./gradlew build

# Clean the build
./gradlew clean

# Build and install distributions
./gradlew installDist

# Run tests
./gradlew test

# Build without running tests
./gradlew build -x test
1.4.打包等待

过程较慢,耐心等待…

如果不想进行测试,或者执行test命令报错,直接运行最后一句./gradlew build -x test打包命令。

1.5.拷贝安装包

编译好的目录如下,拷贝对应包并解压到合适的目录,重命一个简短的名称。

Azkaban部署和配置

安装包在对应的目录下:

比如 /opt/soft/azkban/azkaban-3.85.1/azkaban-exec-server/build/distributions 下面是执行器的azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz。

拷贝解压好并重命名后如下: 因为不是单机模式,所以暂时没有solo-server。

Azkaban部署和配置

1.6.初始化数据库

创建好数据库后,用上面azkaban-db中的脚本初始化

-- 创建一个数据库
mysql> create database azkaban;
-- 创建一个用户
mysql> create user 'azkaban'@'%' identified by 'Azkaban@123';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;
-- 切换数据库,执行脚本
mysql> use azkaban;
mysql> source /opt/soft/create-all-sql-0.1.0-SNAPSHOT.sql;
1.7.配置azkaban
  • 配置exec-server

    exec-server配置文件:azkaban.properties

    汉字注释的地方都需要修改下。

    # Azkaban Personalization Settings
    azkaban.name=Test
    azkaban.label=My Local Azkaban
    azkaban.color=#FF3601
    azkaban.default.servlet.path=/index
    #修改为绝对路径
    web.resource.dir=/opt/module/azkaban/azkaban-exec-server/web/
    #修改时区
    default.timezone.id=Asia/Shanghai
    # Azkaban UserManager class
    user.manager.class=azkaban.user.XmlUserManager
    #修改为绝对路径
    user.manager.xml.file=/opt/module/azkaban/azkaban-exec-server/conf/azkaban-users.xml
    # Loader for projects
    executor.global.properties=/opt/module/azkaban/azkaban-exec-server/conf/global.properties
    azkaban.project.dir=projects
    # Velocity dev mode
    velocity.dev.mode=false
    # Azkaban Jetty server properties.
    jetty.use.ssl=false
    jetty.maxThreads=25
    jetty.port=8081
    # Where the Azkaban web server is located
    azkaban.webserver.url=http://localhost:8081
    # 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=/opt/module/azkaban/azkaban-exec-server/plugins/jobtypes
    # Azkaban mysql settings 修改数据库配置
    database.type=mysql
    mysql.port=3306
    mysql.host=192.168.111.204
    mysql.database=azkaban
    mysql.user=azkaban
    mysql.password=Azkaban@123
    mysql.numconnections=100
    # Azkaban Executor settings
    executor.maxThreads=50
    executor.flow.threads=30
    
    
  • 配置web-server

    azkaban.properties

    # Azkaban Personalization Settings
    azkaban.name=Test
    azkaban.label=My Local Azkaban
    azkaban.color=#FF3601
    azkaban.default.servlet.path=/index
    web.resource.dir=/opt/module/azkaban/azkaban-web-server/web/
    default.timezone.id=Asia/Shanghai
    # Azkaban UserManager class
    user.manager.class=azkaban.user.XmlUserManager
    #修改为绝对路径
    user.manager.xml.file=/opt/module/azkaban/azkaban-web-server/conf/azkaban-users.xml
    # Loader for projects 这里配置的exec的路径
    executor.global.properties=/opt/module/azkaban/azkaban-exec-server/conf/global.properties
    azkaban.project.dir=projects
    # Velocity dev mode
    velocity.dev.mode=false
    # Azkaban Jetty server properties.
    jetty.use.ssl=false
    jetty.maxThreads=25
    jetty.port=8081
    # Azkaban Executor settings
    # 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 mysql settings by default. Users should configure their own username and password.
    database.type=mysql
    mysql.port=3306
    mysql.host=192.168.111.204
    mysql.database=azkaban
    mysql.user=azkaban
    mysql.password=Azkaban@123
    mysql.numconnections=100
    #Multiple Executor
    #注意如果你的剩余内存不足6g必须把下面的 MinimumFreeMemory, 删除。不然会出错
    azkaban.use.multiple.executors=true
    azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
    azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1
    azkaban.executorselector.comparator.Memory=1
    azkaban.executorselector.comparator.LastDispatched=1
    azkaban.executorselector.comparator.CpuUsage=1
    
    

    azkaban-users.xml 添加一个web页面登录账号:

    <user password="admin" roles="admin" username="admin"/>
    <azkaban-users>
      <user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/>
      <user password="metrics" roles="metrics" username="metrics"/>
      <user password="admin" roles="admin" username="admin"/>
      <role name="admin" permissions="ADMIN"/>
      <role name="metrics" permissions="METRICS"/>
    </azkaban-users>
    
    
1.8.启动服务

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

启动exec-server

./bin/start-exec.sh

启动web-server

./bin/start-web.sh

通过jps命令查看是否启动:

Azkaban部署和配置

如果启动web-server没反应,可以查看日志,如果报错:No active executors found

需要手动激活:

curl http://${executorHost}:${executorPort}/executor?action=activate端口 exec-server目录下的executor.port文件查看:

curl http://localhost:33923/executor?action=activate

这里切记不要手动去改mysql的executors表的active字段为1,虽然改了可以安装webserver,但是改的不彻底,会为后续执行job留下隐患,所以必须要用上面的方式激活

如果是迁移已有的安装目录,可能需要重新初始化数据库,并删除curentPID,executore.port等文件重新激活。

1.9.配置ssl(可选)

证书如果要设置,建议使用阿里云的证书,否则按照下文自己生成,在执行job时,可能会报

[Azkaban] EXCEPTION
javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown

所以以下步骤仅做配置的参考,不建议去配置。

web-server的访问,可以配置ssl证书,采用https访问。只需如下两步:

  • 第一步:生成证书

    cd /
    keytool -keystore keystore -alias jetty -genkey -keyalg RSA
    

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

    -keystore:指定密钥库的名称及位置(产生的各类信息将不在.keystore文件中)

    -genkey:在用户主目录中创建一个默认文件".keystore"

    -alias:对我们生成的.keystore进行指认别名;如果没有默认是mykey

    -keyalg:指定密钥的算法 RSA/DSA 默认是DSA

    密码最后设置成一样,好记,其他选项直接回车即可。

  • 第二步:在web-server的azkaban.properties 增加如下配置

    #原来是false,修改为true
    jetty.use.ssl=true
    jetty.ssl.port=8443
    #SSL文件名(绝对路径)
    jetty.keystore=/opt/module/azkaban/azkaban-web-server/keystore
    #SSL文件密码
    jetty.password=000000
    #Jetty主密码与keystore文件相同
    jetty.keypassword=000000
    #SSL文件名(绝对路径)
    jetty.truststore=/opt/module/azkaban/azkaban-web-server/keystore
    #SSL文件密码
    jetty.trustpassword=000000
    
    
  • 第三步:重启webserver

    #关闭webserver
    ./bin/shutdown-web.sh
    #启动
    ./bin/start-web.sh
    
  • 第四步:通过 https://ip:8443访问

2.使用Azkaban

​ Azkaban使用步骤:

​ 编写job文件=》打包成zip=》新建工程=》上传zip包=》执行

2.1.简单入门

1)创建job描述文件

#first.job
type=command
command=echo 'this is my first job'
  1. 打包成zip

目前,Azkaban上传的工作流文件只支持xxx.zip文件。zip应包含xxx.job运行作业所需的文件和任何文件(文件名后缀必须以.job结尾,否则无法识别)。作业名称在项目中必须是唯一的。

简单步骤查看下面的录屏:


Azkaban部署和配置

2.2.常见错误
  • 错误1:

一直是prepare状态,很有可能是你的内存不够6G导致的回看步骤1.7中web-server的azkaban.properties你是否已经把MinimumFreeMemory, 字段删除?如果没删这话又没有6G内存的话~~这自检永远过不去,你的job就一直只能是准备状态。

  • 错误2:

    另一个坑是ssl如果使用自己生成的证书,也会导致执行失败。日志目录:安装目录/azkaban-web-server/logs/azkaban-webserver.log

    javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
    
  • 错误3:

    激活方式不对会导致

    azkaban.executor.ExecutorManagerException: executor became inactive before setting up the flow 10
    

3.小结

本文讲了Azkaban的安装和基本介绍,后续会更新Azkaban如何在大数据开发中调度作业任务的使用,请多多关注。

上一篇:Node + MongoDB 通用 CRUD 接口实现笔记


下一篇:mybatis-plus 开发利器 ,再也不用写单表CRUD的重复代码了!