• Azkaban3.x集群部署(multiple executor mode)


    介绍

    Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。 它有三个重要组件:

    • 关系数据库(目前仅支持mysql)
    • web管理服务器-AzkabanWebServer
    • 执行服务器-AzkabanExecutorServer

    Azkaban使用MySQL来存储它的状态信息,Azkaban Executor Server和Azkaban Web Server均使用到了MySQL数据库。

    AzkabanExecutorServer在如下几个方面使用到了数据库:

    • 获取project的信息
    • 执行工作流
    • 存储工作流运行日志
    • 如果一个工作流在不同的执行器上运行,它将从DB中获取状态。

    AzkabanWebServer在如下几个方面使用到了数据库:

    • Project管理
    • 跟踪工作流执行进度
    • 访问历史工作流的运行信息
    • 定时执行工作流任务
    • 记录所有sla规则

    AzkabanWebServer
    AzkabanWebserver是整个Azkaban工作流系统的主要管理者,它负责project管理、用户登录认证、定时执行工作流、跟踪工作流执 行进度等一系列任务。同时,它还提供Web服务操作的接口,利用该接口,用户可以使用curl或其他ajax的方式,来执行azkaban的相关操作。操作包括:用户登录、创建project、上传workflow、执行workflow、查询workflow的执行进度、杀掉workflow等一系列操作,且这些操作的返回结果均是json的格式。

    AzkabanExecutorServer
    之所以将AzkabanWebServer和AzkabanExecutorServer分开,主要是因为在某个任务流失败后,可以更方便的将重新执行。而且也更有利于Azkaban系统的升级。

    编译安装

    1、下载源码

    从github上下载azkaban官方源码,目前最新release为3.30.1

    git clone git@github.com:azkaban/azkaban.git
    

    2、编译

    进入到下载的azkaban目录中进行编译:

    # Build Azkaban
    ./gradlew build(这一步需要等待的时间略久,需要提前安装git、gcc等软件,否则会报错)
    
    # Clean the build
    ./gradlew clean
    
    # Build and install distributions
    ./gradlew installDist
    
    # Run tests
    ./gradlew test
    
    # Build without running tests
    ./gradlew build -x test
    

    相关目录介绍如下:

    azkaban-common : 常用工具类
    azkaban-db : 对应的sql脚本
    azkaban-Hadoop-secutity-plugin : hadoop有关kerberos插件
    azkaban-solo-server: web和executor运行在同一进程的项目
    azkaban-web-server:azkaban的web-server单独模块
    azkaban-executor-server: azkaban的executor-server单独模块
    azkaban-spi: azkaban存储接口以及exception类
    

    将编译好的文件拷贝出来:

    # mkdir Azkaban_3.30
    # cp azkaban-master/azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz azkaban_3.30/
    # cp azkaban-master/azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz azkaban_3.30/
    # cp azkaban-master/azkaban-solo-server/build/distributions/azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz azkaban_3.30/
    # cp azkaban-master/azkaban-db/build/distributions/azkaban-db-0.1.0-SNAPSHOT.tar.gz azkaban_3.30/
    

    解压:

    # cd azkaban_3.30
    # tar xvf azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz 
    # tar xvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz 
    # tar xvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz 
    # tar xvf azkaban-db-0.1.0-SNAPSHOT.tar.gz 
    

    配置mysql数据库

    1、安装mysql数据库

    这里省略安装步骤,使用版本的为5.7

    2、创建数据库

    创建一个azkaban的数据库:

    mysql -uroot -p
    > CREATE DATABASE azkaban;
    

    授权:

    > CREATE USER 'azkaban'@'%' IDENTIFIED BY 'password';
    > GRANT ALL ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;
    > flush privileges;
    > FLUSH PRIVILEGES;
    > EXIT
    

    3、导入建表语句

    mysql -uazkaban -p
    > SOURCE azkaban_3.30/azkaban-db-0.1.0-SNAPSHOT/create-all-sql-0.1.0-SNAPSHOT.sql;
    

    配置Azkaban

    这里将安装三个exec-server和一个web-server,相关组件分配如下:

    本文将采用multiple executor mode安装模式,组件分配如下:
    bd-dev-ops-170       172.31.217.170       azkaban-exec-server
    bd-dev-ops-171       172.31.217.171       azkaban-exec-server
    bd-dev-ops-172       172.31.217.172       azkaban-web-server  azkaban-exec-server
    bd-dev-ops-173       172.31.217.173       mysql-server
    

    在172上创建/opt/Azkaban-web-server目录,把编译好的软件拷贝到该目录,包含以下目录:

    bin 	 启动脚本存放目录
    conf 	 配置文件存放目录(没有的话从solo-server的目录中拷贝过来)
    lib 	 依赖jar包存放目录
    extlib   附加jar包存放目录(没有的话手动创建)
    plugins  插件安装目录
    web 	 web资源文件
    

    在170,171,172上创建目录/opt/Azkaban-exec-server目录,把编译好的软件拷贝到该目录,包含以下目录:

    bin 	 启动脚本存放目录
    conf 	 配置文件存放目录(没有的话从solo-server的目录中拷贝过来)
    lib 	 依赖jar包存放目录
    extlib   附加jar包存放目录(没有的话手动创建)
    plugins  插件安装目录
    

    配置Azkaban Web Server

    1、配置jetty ssl

    # keytool -keystore keystore -alias jetty -genkey -keyalg RSA
    Enter keystore password:  
    Re-enter new password: 
    What is your first and last name?
      [Unknown]:  YY
    What is the name of your organizational unit?
      [Unknown]:  YY
    What is the name of your organization?
      [Unknown]:  YY
    What is the name of your City or Locality?
      [Unknown]:  shanghai
    What is the name of your State or Province?
      [Unknown]:  shanghai
    What is the two-letter country code for this unit?
      [Unknown]:  CN
    Is CN=YY, OU=YY, O=YY, L=shanghai, ST=shanghai, C=CN correct?
      [no]:  yes
    

    将生成的keystone文件拷贝到web-server的安装目录下,和conf等目录同级

    2、修改conf/azkaban.properties配置文件

    #cat azkaban.properties 
    # Azkaban Personalization Settings
    azkaban.name=Test              #服务器UI名称,用于服务器上方显示的名字
    azkaban.label=My Local Azkaban #描述
    azkaban.color=#FF3601          #UI颜色
    azkaban.default.servlet.path=/index
    web.resource.dir=web/          #默认根web目录
    default.timezone.id=Asia/Shanghai #默认时区,已改为亚洲/上海
    # Azkaban UserManager class
    user.manager.class=azkaban.user.XmlUserManager    #用户权限管理默认类
    user.manager.xml.file=conf/azkaban-users.xml      #用户配置,具体配置参见下文
    # Loader for projects
    executor.global.properties=conf/global.properties #globa配置文件所在位置
    azkaban.project.dir=projects                      
    
    # Velocity dev mode
    velocity.dev.mode=false
    # Azkaban Jetty server properties.  #jetty服务器属性
    jetty.maxThreads=25                 #最大线程数
    jetty.ssl.port=8443                 #jetty ssl端口号
    jetty.port=8081                     #jetty端口
    jetty.keystore=keystore             #SSL文件名
    jetty.password=bigdata@123          #SSL文件密码
    jetty.keypassword=bigdata@123       #jetty主密码与keystore文件相同
    jetty.truststore=keystore           #SSL文件名
    jetty.trustpassword=bigdata@123     #SSL文件密码
    # Azkaban Executor settings
    executor.port=12321                 #执行服务器端口
    # mail settings                     #邮件配置(暂没有配置)
    mail.sender=                        #发送邮箱
    mail.host=                          #发送邮箱smtp地址
    mail.password=                      #邮箱密码
    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=plugins/jobtypes
    
    database.type=mysql          #数据库类型
    mysql.port=3306              #数据库端口号
    mysql.host=172.31.217.173    #数据库连接地址
    mysql.database=azkaban       #数据库实例名
    mysql.user=azkaban           #数据库用户名
    mysql.password=bigdata@123   #数据库密码
    mysql.numconnections=100     #数据库最大连接数
    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
    

    3、上传log4j文件

    在azkaban目录下创建logs文件夹,位置跟conf在同一级,在conf目录中上传log4j文件。简单示例如下:

    log4j.rootLogger=DEBUG,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
    

    如果没有log4j文件,将会以下错误:

    Exception: java.lang.StackOverflowError thrown from the UncaughtExceptionHan
    

    4、用户配置

    添加管理员用户及密码:

    <azkaban-users>
      <user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/>
      <user password="metrics" roles="metrics" username="metrics"/>
      <user username="admin" password="admin" roles="admin,metrics"/>#新增管理员
      <role name="admin" permissions="ADMIN"/>
      <role name="metrics" permissions="METRICS"/>
    </azkaban-users>
    
    

    5、启动web-server

    进入到web-server的目录,执行如下脚本,需要在bin级目录执行,否则汇报找不到配置文件的错误。

    # bin/azkaban-web-start.sh
    

    打开浏览器,访问https://172.31.217.172:8443,用刚刚添加的管理员账户密码登录。

    配置 Azkaban Executor Server

    1、修改conf/azkaban.properties

    # cat azkaban.properties 
    # Azkaban Personalization Settings
    default.timezone.id=Asia/Shanghai
    # Loader for projects
    executor.global.properties=conf/global.properties
    azkaban.project.dir=projects
    # Azkaban plugin settings
    azkaban.jobtype.plugin.dir=plugins/jobtypes
    
    database.type=mysql
    mysql.port=3306
    mysql.host=172.31.217.173
    mysql.database=azkaban
    mysql.user=azkaban
    mysql.password=bigdata@123
    mysql.numconnections=100
    
    # Azkaban Executor settings
    executor.maxThreads=50
    executor.port=12321
    executor.flow.threads=30
    

    2、上传log4j文件

    在azkaban目录下创建logs文件夹,位置跟conf在同一级,在conf目录中上传log4j文件。简单示例如下:

    log4j.rootLogger=DEBUG,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
    

    如果没有log4j文件,将会以下错误:

    Exception: java.lang.StackOverflowError thrown from the UncaughtExceptionHan
    

    3、启动exec-server

    进入到exec-server的目录,执行如下脚本,需要在bin级目录执行,否则汇报找不到配置文件的错误。(一共三台机器)

    # bin/azkaban-executor-start.sh
    # 在这种模式下,先要启动exec-server,再启动web-server
    
  • 相关阅读:
    C#新功能--命名参数与可选参数
    C#新功能--命名参数
    初识SqlLite ---.net连接数据库
    混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该...
    看到他我一下子就悟了-- 泛型(2)
    ExtJS4中设置tabpanel的tab高度问题
    java学习1-环境搭建
    oracle获取clob调优
    oracle job定时执行存储过程
    【转】【真正福利】成为专业程序员路上用到的各种优秀资料、神器及框架
  • 原文地址:https://www.cnblogs.com/bugsbunny/p/7412164.html
Copyright © 2020-2023  润新知