• azkaban编译安装配置文档


    azkaban编译安装配置文档

    参考官方文档: http://azkaban.github.io/azkaban/docs/latest/
    azkaban的配置文件说明:http://azkaban.github.io/azkaban/docs/latest/#configuration
    本文挡主要参考azkaban的官方文档。

    在azkaban3.0 以后的版本,提供了3中安装模式。单 solo-server mode, two server mode和multiple-executor mode。这三种模式的区别如下:

    • solo-server mode : 单机模式,
      轻量;使用内置的h2数据库, web server 和 executor server在同一个进程里,适合用于尝试和了解azkaban的功能。
    • two server mode:双机模式
      更严格,更重模式,适合生成环境;使用主从的mysql做存储,web server 和 executor server在不同的进程中,跟新和升级时对用户的影响较小。
    • multiple-executor mode:多个执行器模式
      该模式是最严格的生产环境。使用主从的mysql做存储;理想情况下,Web服务器(web server)和执行器(executor server)服务器在不同的主机上运行,以便升级和维护不应影响用户。 这个多主机设置为Azkaban带来了强大而可扩展的功能。

    一 、 solo 模式的安装配置

    可以按照如下步骤安装azkaban的solo模式.

    1. 下载克隆azkaban的git源码
      git clone https://github.com/azkaban/azkaban.git
    2. 编译当前最新版本的azkaban源码
    cd azkaban; 
    ./gradlew build installDist -x test  #跳过测试
    
    1. 启动solo模式的azkaban服务
    cd azkaban-solo-server/build/install/azkaban-solo-server; 
    nohup sh bin/azkaban-solo-start.sh > ./azkaban-solo-start.log 2>&1 &
    

    4.停止azkaban服务
    bin/azkaban-solo-shutdown.sh

    vi conf/azkaban-users.xml
    查看azkaban默认的登录用户为: azkaban / azkaban

    二 、 azkaban 的 multiple-executor 模式安装

    1. 编译azkaban源码
      我们先从GitHub上克隆源码,构建master分支下的代码,即当前最新的版本。
    git clone https://github.com/azkaban/azkaban.git
    cd ./azkaban
    ./gradlew clean
    ./gradlew build installDist -x test  #跳过测试
    
    1. azkaban数据库初始化
    • 在mysql上创建 azkaban的数据库
       mysql> CREATE DATABASE azkaban;
       mysql> CREATE USER 'azkaban' IDENTIFIED BY 'azkaban!#@';
       mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban' WITH GRANT OPTION;
      
    • 创建azkaban的数据库的初始化表:
       ./azkaban-db/build/sql/create-all-sql-3.32.2.sql
      
    1. 安装 azkaba的Web Server
      编译后web server安装包目录位置 : azkaban-web-server/build/distributions/azkaban-web-server-3.32.2.tar.gz,编译后的安装包,解压后,只有bin,lib,web三个文件夹。
      azkaban-web-server 应包含如下目录:
    Folder Description
    bin 启动Azkaban jetty server 的脚本
    conf Azkaban的配置文件,
    lib Azkaban依赖的jar文件
    extlib 添加到extlib的其他jar将被添加到Azkaban的类路径中
    plugins 安装插件的目录
    web The web (css, javascript, image) files for Azkaban web server.

    conf 目录下应该有如下文件:

    • azkaban.properties - azkaban运行时参数,是设置Azkaban所需的主要配置文件。
    • global.properties - 作为共享属性传递给每个工作流和作业的全局静态属性
    • azkaban-users.xml - 用于添加用户和角色进行身份验证。 如果XmLUserManager未设置为使用该文件,则不使用该文件。

    还需要创建conf,extlib,plugins文件;以及conf目录下的azkaban.properties,global.properties,azkaban-users.xml 3个配置文件。

    tar -zxvf azkaban-web-server-3.29.0.tar.gz
    cd azkaban-web-server-3.32.2
    mkdir conf
    mkdir extlib
    mkdir plugins
    mkdir logs
    touch conf/azkaban.properties
    touch conf/global.properties
    touch conf/azkaban-users.xml
    touch conf/azkaban.private.properties
    touch conf/log4j.properties
    cp  mysql-connector-java-5.1.42-bin.jar ./extlib/
    
    • 获取 KeyStore for SSL:Azkaban 可以用 SSL 网络连接
    ##使用如下命令创建一个SSL密钥
    keytool -keystore keystore -alias jetty -genkey -keyalg RSA
    

    生成的 keystore SSL密钥文件放在azkaban-web-server-3.32.2目录下即可。一旦keystore SSL密钥文件创建,需要在azkaban.properties中配置ssl相关的配置。

    • 下面一份azkaban-web-server的azkaban.propertiesp完整配置示例
      可以参考solo模式的配置文件azkaban-solo-server/build/distributions/azkaban-solo-server-3.32.2/conf/azkaban.properties作为模板
    # Azkaban Personalization Settings
    azkaban.name=mtime
    azkaban.label=mtime bigdata scheduler system online
    azkaban.color=#FF3601
    #azkaban.color=#22DD6D
    azkaban.default.servlet.path=/index
    web.resource.dir=web/
    default.timezone.id=Asia/Shanghai
    
    # UserManager config
    user.manager.class=azkaban.user.XmlUserManager
    user.manager.xml.file=conf/azkaban-users.xml
    
    # Loader for projects
    executor.global.properties=conf/global.properties
    azkaban.project.dir=projects
    
    # Velocity dev mode
    velocity.dev.mode=false
    
    # Azkaban Jetty server properties.
    #jetty.use.ssl=false
    jetty.use.ssl=true
    jetty.ssl.port=8993
    jetty.maxThreads=25
    jetty.port=8081
    
    # Azkaban Executor settings
    executor.host=mtime-bigdata01
    executor.port=12321
    
    # mail settings
    mail.sender=monitor@mtime.com
    mail.host=mail.mtime.com
    mail.user=monitor@mtime.com
    mail.password=111112232
    mail.tls=true
    job.failure.email=fuxin.zhao@mtime.com
    job.success.email=fuxin.zhao@mtime.com
    
    lockdown.create.projects=false
    cache.directory=cache
    
    # JMX stats
    jetty.connector.stats=true
    executor.connector.stats=true
    
    # Azkaban plugin settings
    azkaban.jobtype.plugin.dir=plugins/jobtypes
    
    #  KeyStore for SSL
    jetty.keystore=keystore
    jetty.password=mtimebigdata
    jetty.keypassword=mtimebigdata
    jetty.truststore=keystore
    jetty.trustpassword=mtimebigdata
    
    # Setting up the DB
    database.type=mysql
    mysql.port=3306
    mysql.host=192.168.51.121
    mysql.database=dmp
    mysql.user=dmpuser
    mysql.password=dmpuser123456
    mysql.numconnections=100
    
    #Multiple Executor Mode
    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
    

    vi log4j.properties

    #OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL
    #log4j.rootLogger=info,console,dailyLog
    log4j.rootLogger=info,console
    
    #---------------------------------------------------------------
    ####u8f93u51fau65e5u5fd7u5230u63a7u5236u53f0
    log4j.appender.console=org.apache.log4j.ConsoleAppender
    log4j.appender.Threshold.console=info
    log4j.appender.console.Target=System.out
    log4j.appender.console.layout=org.apache.log4j.PatternLayout
    log4j.appender.console.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
    
    #--------------------------------------------------------------------------------
     
    log4j.logger.test=debug
    log4j.logger.org.apache.spark.scheduler=ERROR
    
    

    vi azkaban-users.xml

    <azkaban-users>
      <user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/>
      <user password="metrics" roles="metrics" username="metrics"/>
    
      <user groups="bi" username="zhaofuxin"  password="123456" roles="read,write,execute,schedule,createprojects"/>
      <user groups="test" username="test"  password="123456" roles="read"/>
      <user groups="test" username="test1"  password="123456" roles="read,write,execute"/>
      <user groups="test" username="test2"  password="123456" roles="read,write,execute,schedule"/>
      
      <role name="metrics" permissions="METRICS"/>
      <role name="admin" permissions="ADMIN"/>
      <role name="read" permissions="READ"/>
      <role name="write" permissions="WRITE"/>
      <role name="execute" permissions="EXECUTE"/>
      <role name="schedule" permissions="SCHEDULE"/>
      <role name="createprojects" permissions="CREATEPROJECTS"/>
    </azkaban-users>
    

    **4. **安装 azkaba的Executor Server

    编译后web server安装包目录位置:azkaban-exec-server/build/distributions/azkaban-exec-server-3.32.2.tar.gz, 编译后的安装包,解压后,只有bin,lib三个文件夹。
    azkaban-exec-server 应包含如下目录:

    Folder Description
    bin 启动Azkaban jetty server 的脚本
    lib Azkaban依赖的jar文件
    conf Azkaban的配置文件,
    extlib 添加到extlib的其他jar将被添加到Azkaban的类路径中
    plugins 安装插件的目录
    logs 日志目录,系统自动创建
    executions 执行日志目录,系统自动创建
    projects 项目目录,系统自动创建

    还需要创建conf,extlib,plugins文件;以及conf目录下的azkaban.properties 配置文件。

    • 创建Executor Server下缺少的目录和文件
    cd ~/azkaban/azkaban-exec-server-3.29.0
    mkdir conf
    mkdir extlib
    mkdir plugins
    mkdir logs
    mkdir plugins/jobtypes
    touch conf/global.properties
    touch conf/azkaban.properties
    touch conf/log4j.properties
    touch plugins/jobtypes/commonprivate.properties
    cp  mysql-connector-java-5.1.42-bin.jar ./extlib/
    
    • 配置Executor Server的配置信息
      vi conf/azkaban.properties
    # Azkaban Personalization Settings
    default.timezone.id=Asia/Shanghai
    
    # Loader for projects
    executor.global.properties=conf/global.properties
    
    azkaban.project.dir=projects
    
    # JMX stats
    jetty.connector.stats=true
    executor.connector.stats=true
    
    # Azkaban plugin settings
    azkaban.jobtype.plugin.dir=plugins/jobtypes
    
    # Azkaban Executor settings
    executor.maxThreads=50
    executor.flow.threads=30
    
    #Azkaban Executor port
    executor.port=12321
    
    # Setting up the DB
    database.type=mysql
    mysql.port=3306
    mysql.host=192.168.51.121
    mysql.database=dmp
    mysql.user=dmpuser
    mysql.password=dmpuser123456
    mysql.numconnections=100
    

    vi plugins/jobtypes/commonprivate.properties

    # set execute-as-user
    execute.as.user=false
    #execute.as.user=true
    #azkaban.native.lib=/home/hadoop/soft/azkaban/azkaban-web-server-3.29.0/bin
    

    vi log4j.properties

    #OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL
    #log4j.rootLogger=info,console,dailyLog
    log4j.rootLogger=info,console
    
    #---------------------------------------------------------------
    ####u8f93u51fau65e5u5fd7u5230u63a7u5236u53f0
    log4j.appender.console=org.apache.log4j.ConsoleAppender
    log4j.appender.Threshold.console=info
    log4j.appender.console.Target=System.out
    log4j.appender.console.layout=org.apache.log4j.PatternLayout
    log4j.appender.console.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
    
    #--------------------------------------------------------------------------------
    log4j.logger.test=debug
    log4j.logger.org.apache.spark.scheduler=ERROR
    
    
    • 如果要使用Multiple Executor 模式,需要在 webserver 的conf/azkaban.properties中配置如下信息:
    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
    

    配置修改后需要在重启后才能生效。

    • 在数据库中配置Multiple Executor 模式
    insert into executors(host,port,active) values('192.168.17.50','12321','1');
    insert into executors(host,port,active) values('192.168.17.51','12321','1');
    insert into executors(host,port,active) values('192.168.17.52','12321','1');
    

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

    • 启动executor
      分别到多个excuter节点的服务上启动executor服务
    cd azkaban-exec-server
    sh bin/start-exec.sh
    查看logs下的日志文件是否有错误
    
    
    • 启动Web Server
    bin/start-web.sh
    
    没有启动了ssl,访问如下地址:
    http://192.168.17.50:8081
    
    启动了ssl,访问如下地址:访问协议使用https,端口使用conf/azkaban.properties配置的jetty.ssl.port端口
    https://192.168.17.50:8993
    

    三、附录-异常

    • 关于azkaban.native.lib的异常:
    15-06-2017 19:05:03 CST hello1 ERROR - Job run failed!
    azkaban.utils.UndefinedPropertyException: Missing required property 'azkaban.native.lib'
    	at azkaban.utils.Props.getString(Props.java:426)
    	at azkaban.jobExecutor.ProcessJob.run(ProcessJob.java:209)
    	at azkaban.execapp.JobRunner.runJob(JobRunner.java:755)
    	at azkaban.execapp.JobRunner.doRun(JobRunner.java:597)
    	at azkaban.execapp.JobRunner.run(JobRunner.java:558)
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	at java.lang.Thread.run(Thread.java:745)
    15-06-2017 19:05:03 CST hello1 ERROR - Missing required property 'azkaban.native.lib' cause: null
    15-06-2017 19:05:03 CST hello1 INFO - Finishing job hello1 attempt: 0 at 1497524703532 with status FAILED
    
    scp ./azkaban-common/src/main/c/execute-as-user.c  to  ${azkaban.native.lib}
    gcc execute-as-user.c -o execute-as-user
    chown root execute-as-user
    chmod 6050 execute-as-user
    

    vi azkaban-exec-server-3.29.0/plugins/jobtypes/commonprivate.properties

    execute.as.user=true
    azkaban.native.lib=/home/zhaofuxin/soft/azkaban/azkaban-web-server-3.29.0/bin
    
    • 邮件配置错误
      azkaban 任务执行时邮件发送不成功。主要是配置原因,邮件发送失败的异常信息会在web server 的log 文件 webServerLog_20170621-130947.out的日志中打印,之前一直在excuter 的log和在job的运行日志中查问题,所以看不到异常。
      原因是邮件的tls没有开启,在 web server的 conf/azkaban.properties加入如下配置:
    mail.tls=true
    
    • global.properties 没有创建,但是azkaban.properties中配置了,会发生异常:
    2017-09-25 16:13:00 [azkaban.utils.StdOutErrRedirect]-[ERROR] Exception in thread "main" 
    2017-09-25 16:13:00 [azkaban.utils.StdOutErrRedirect]-[ERROR] com.google.inject.ProvisionException: Unable to provision, see the following errors:
    
    1) Error injecting constructor, java.io.FileNotFoundException: conf/global.properties (No such file or directory)
      at azkaban.execapp.FlowRunnerManager.<init>(FlowRunnerManager.java:155)
      at azkaban.execapp.AzkabanExecServerModule.configure(AzkabanExecServerModule.java:38)
      while locating azkaban.execapp.FlowRunnerManager
        for the 3rd parameter of azkaban.execapp.AzkabanExecutorServer.<init>(AzkabanExecutorServer.java:103)
      at azkaban.execapp.AzkabanExecServerModule.configure(AzkabanExecServerModule.java:36)
      while locating azkaban.execapp.AzkabanExecutorServer
    
    
    • bin/star-exec.sh 出现如下异常:
    hadoop/apache-hadoop/hadoop/*
    Starting AzkabanExecutorServer on port 12321
    12321 ...
    Error: Could not find or load main class 12321
    

    原因是 conf/azkaban.properties 中 "executor.port=12321" 配置2遍,去掉一个即可。

    • log4j.properties 没有配置出现如下异常:添加log4j配置后恢复正常
    Starting AzkabanExecutorServer on port 12321 ...
    Exception: java.lang.StackOverflowError thrown from the UncaughtExceptionHandler in thread "main"
    
  • 相关阅读:
    csrf跨站请求伪造
    IO 之 InputStream 和 Reader
    javadoc tags
    java this
    递归
    java 文件中 定义一个字符串,它的默认编码是什么?
    合并数组
    << 移位运算
    final static T
    Base64.java 工具类
  • 原文地址:https://www.cnblogs.com/honeybee/p/7592774.html
Copyright © 2020-2023  润新知