• 【Azkaban搭建】---Azkaban 3.25.0搭建细则 超实用


    一、前述

    Azkaban是一个工作流调度工具,因为需要各个任务之间有依赖关系,传统的Crontab 任务已经不能满足。

    所以需要建立一套工作流引擎。相比Ooize来说,Azkaban的优势是作为一个客户端来提供任务的提交。而Ooize是将任务随机分配到我们的集群环境中。

    考虑到常用架构,所以我们选择Azkaban进行工作流引擎。但是网上的搭建教程总会有各种各样的问题,实在令人烦心。折腾了好几天,终于把Azkaban搭建成功,特将详细步骤描述如下。

    这里给出一个建议,Azkaban千万不要用最新的搭建,因为你会有意想不到的坑。。

    二、具体步骤

    1、下载Azkaban的3.25.0的软件包 地址如下:

    https://github.com/azkaban/azkaban/releases/tag/3.25.0

    2、下载后上传到对应服务器 目录上面。本文地址目录为/mnt/data8/ire/

    3、解压目录并重命名

    tar - xf azkaban-3.25.0.tar.gz

    mv azkaban-3.25.0 azkaban

    4、对源码编译

    ./gradlew build 编译
    ./gradlew build -x test 忽略测试 (当上一个命令执行不成功再执行这个命令,上个执行成功后就不需要了,因为有的时候总卡在编译测试上面,没办法进行了)

    ./gradlew installDist 打包

    5、新建azkaban编译后的运行目录

    我在根目录/mnt/data8/ire/下新建目录azkaban-ire

    mkdir azkaban-ire

    6、将build后的tar包cp到azkaban-ire目录下

    cp azkaban/azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz azkaban-ire/
    cp azkaban/azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz azkaban-ire/
    cp azkaban/azkaban-db/build/distributions/azkaban-db-0.1.0-SNAPSHOT.tar.gz azkaban-ire/
    解压对应jar 包 并重命名(强力建议) 因为后面会有一堆绝对路径的引入,名字太长,太麻烦。效果如下

    tar -xf azkaban-db-0.1.0-SNAPSHOT.tar.gz

    tar -xf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz

    tar -xf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz

    mv azkaban-db-0.1.0-SNAPSHOT azkaban-db

    mv azkaban-exec-server-0.1.0-SNAPSHOT azkaban-exec-server

    mv azkaban-web-server-0.1.0-SNAPSHOT azkaban-web-server

    7、导入Azkaban-sql

    选择一个数据库,或者新建一个数据库为Azkaban 命令如下:

    CREATE DATABASE azkaban;
    CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';
    GRANT ALL ON azkaban.* to 'azkaban'@'localhost' IDENTIFIED BY 'azkaban';
    flush privileges;

    use azkaban;
    source azkaban-ire/azkaban-db-0.1.0-SNAPSHOT/create-all-sql-0.1.0-SNAPSHOT.sql

     这里建议手动执行吧 执行之前最好删除之前因为其他版本创建的表,如下:

    drop table active_executing_flows;
    drop table active_sla;
    drop table execution_flows;
    drop table execution_jobs;
    drop table execution_logs;
    drop table executor_events;
    drop table executors;
    drop table project_events;
    drop table project_files;
    drop table project_flows;
    drop table project_permissions;
    drop table project_properties;
    drop table properties_index ;
    drop table projects;
    drop table properties;
    drop table triggers;
    drop table project_flow_files;  
    drop table project_versions;
    drop table  qrtz_blob_triggers,qrtz_calendars,qrtz_cron_triggers,qrtz_fired_triggers,qrtz_job_details,qrtz_locks,qrtz_paused_trigger_grps,qrtz_scheduler_state,qrtz_simple_triggers,qrtz_simprop_triggers,qrtz_triggers;  

    在create-all-sql-0.1.0-SNAPSHOT.sql里面最后一行可以去掉 ,因为已经有这个字段了。

     

     8、配置azkaban-web-server

     8.1、在azkaban-web-server中新建conf目录,结构如下

    mkdir conf

    ├── conf
    │   ├── azkaban-users.xml
    │   ├── azkaban.properties
    │   ├── global.properties
    │   └── log4j.properties

    azkaban-users.xml

    <azkaban-users>
        <user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
        <user username="metrics" password="metrics" roles="metrics"/>
        <user username="admin" password="admin" roles="admin,metrics" />
        <role name="admin" permissions="ADMIN" />
        <role name="metrics" permissions="METRICS"/>
    </azkaban-users>

    azkaban.properties

    # Azkaban Personalization Settings
    #设置项目名称
    azkaban.name=Test
    #设置项目副标题
    azkaban.label=My Local Azkaban
    azkaban.color=#FF3601
    azkaban.default.servlet.path=/index
    #这里一定写成绝对路径  否则页面会找不到对应地址
    web.resource.dir=/mnt/data8/ire/azkaban-ire/azkaban-web-server/web/
    #一定要设置为上海,否则按美国时间执行
    default.timezone.id=Asia/Shanghai
    
    # Azkaban UserManager class
    user.manager.class=azkaban.user.XmlUserManager
    #这里一定写成绝对路径
    user.manager.xml.file=/mnt/data8/ire/azkaban-ire/azkaban-web-server/conf/azkaban-users.xml
    
    # Loader for projects
    #这里一定写成绝对路径  否则页面会找不到对应地址
    executor.global.properties=/mnt/data8/ire/azkaban-ire/azkaban-web-server/conf/global.properties
    azkaban.project.dir=projects
    
    database.type=mysql
    mysql.port=3306
    mysql.host=127.0.0.1
    mysql.database=azkaban
    mysql.user=root
    mysql.password=root
    mysql.numconnections=100
    
    # Velocity dev mode
    velocity.dev.mode=false
    
    # Azkaban Jetty server properties.
    jetty.maxThreads=25
    jetty.ssl.port=8443
    jetty.use.ssl=false
    jetty.port=8081
    jetty.keystore=keystore
    jetty.password=password
    jetty.keypassword=keypassword
    jetty.truststore=keystore
    jetty.trustpassword=password
    jetty.excludeCipherSuites=SSL_RSA_WITH_DES_CBC_SHA,SSL_DHE_RSA_WITH_DES_CBC_SHA,SSL_DHE_DSS_WITH_DES_CBC_SHA,SSL_RSA_EXPORT_WITH_RC4_40_MD5,SSL_RSA_EXPORT_WITH_DES40_CBC_SHA,SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA
    
    # Azkaban Executor settings
    executor.port=12321
    
    # mail settings
    #mail.sender=email账号
    #mail.host=email服务器
    #mail.user=email账号
    #mail.password=email密码
    mail.sender= 
    mail.host=
    job.failure.email=
    job.success.email=
    
    lockdown.create.projects=false
    
    cache.directory=cache
    
    # JMX stats
    jetty.connector.stats=true
    executor.connector.stats=true

    global.properties (置空即可)

    log4j.properties

    log4j.rootLogger=INFO,C
    log4j.appender.C=org.apache.log4j.ConsoleAppender
    log4j.appender.C.Target=System.err
    log4j.appender.C.layout=org.apache.log4j.PatternLayout
    log4j.appender.C.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

    8.2、生成keystore文件。

    在conf目录下执行
    keytool -keystore keystore -alias azkaban -genkey -keyalg RSA
    具体执行效果如下:
    Enter keystore password:    
        Re-enter new password:   
        What is your first and last name?  
          [Unknown]:  azkaban.test.com  
        What is the name of your organizational unit?  
          [Unknown]:  azkaban  
        What is the name of your organization?  
          [Unknown]:  test  
        What is the name of your City or Locality?  
          [Unknown]:  beijing  
        What is the name of your State or Province?  
          [Unknown]:  beijing  
        What is the two-letter country code for this unit?  
          [Unknown]:  CN  
        Is CN=azkaban.test.com, OU=azkaban, O=test, L=beijing, ST=beijing, C=CN correct?  
          [no]:  yes  

        Enter key password for <azkaban>  
                (RETURN if same as keystore password)

     

    8.3、在azkaban-web-server中新建logs目录,用于记录azkaban运行日志结构如下:

     

    currentpid是在启动的时候生成的,不用管。

    9、配置azkaban-exec-server

    9.1在azkaban-exec-server中的conf目录下配置 没有conf目录则创建,同时创建对应下面文件

    ├── conf
    │   ├── azkaban.properties
    │ ├── log4j.properties

    azkaban.properties

    # Azkaban
    default.timezone.id=Asia/Shanghai # Azkaban JobTypes Plugins
    azkaban.jobtype.plugin.dir=plugins/jobtypes # Loader for projects 绝对路径 executor.global.properties=/mnt/data8/ire/azkaban-ire/azkaban-web-server/conf/global.properties azkaban.project.dir=projects database.type=mysql mysql.port=3306 mysql.host=127.0.0.1 mysql.database=azkaban mysql.user=root mysql.password=root mysql.numconnections=100 # Azkaban Executor settings executor.maxThreads=50 executor.port=12321 executor.flow.threads=30 # JMX stats jetty.connector.stats=true executor.connector.stats=true # uncomment to enable inmemory stats for azkaban #executor.metric.reports=true #executor.metric.milisecinterval.default=60000

    log4j.properties

    log4j.rootLogger=INFO,C
    log4j.appender.C=org.apache.log4j.ConsoleAppender
    log4j.appender.C.Target=System.err
    log4j.appender.C.layout=org.apache.log4j.PatternLayout
    log4j.appender.C.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

     

    9.2 在azkaban-exec-server创建plugins/jobtypes 文件夹

    mkdir -p plugins/jobtypes

    在/jobtypes中生成commonprivate.properties文件 写入

    execute.as.user=false

     

    9.3 在azkaban-exec-server创建logs目录

    9.4 最终azkaban-exec-server目录层级如下:

    上图中圈出的即为创建相应文件夹后的格式,而 executors projects temp目录会在执行任务时创建 不用管。

     10、启动azkaban-web-server

    一定要在bin层启动  不在bin目录里面启动  如下:

    cd azkaban-web-server/

    bin/start-web.sh

    11、启动azkaban-exec-server

    cd azkaban-exec-server/

    bin/start-exec.sh

    12、验证效果如下:

    13、前端启动host:8081即可

     14、注意千万不要用firefox浏览器打开,用google,否则会出现如下界面。不兼容,导致Job不能查看。

  • 相关阅读:
    time 时间模块的函数调用
    str 文本函数的调用
    批量分发公钥
    K8s集群部署(四)------ Flannel网络部署
    kuberbetes基础概念
    K8s集群部署(三)------ Node节点部署
    K8s集群部署(二)------ Master节点部署
    K8s集群部署(一)------ETCD集群部署
    日常更新脚本
    CentOS7系统安装
  • 原文地址:https://www.cnblogs.com/LHWorldBlog/p/9897564.html
Copyright © 2020-2023  润新知