阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

134次阅读
没有评论

共计 7337 个字符,预计需要花费 19 分钟才能阅读完成。

介绍

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

  • 关系数据库(目前仅支持 mysql)
  • web 管理服务器-AzkabanWebServer
  • 执行服务器-AzkabanExecutorServer
    Azkaban3.x 集群部署(multiple executor mode)

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

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-09/146881.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计7337字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中