Azkaban 3.62 安装

介绍

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

                                               azkaban_struct.png

1. 元数据数据库(目前仅支持mysql)

2. web管理服务器-AzkabanWebServer

3. 执行服务器-AzkabanExecutorServer

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

metadata Database:存储元数据,如项目名称、项目描述、项目权限、任务状态、SLA规则等。
AzkabanWebServer:项目管理、权限授权、任务调度、监控executor。
AzkabanExecutorServer:作业流执行的Server。

AzkabanWebServer

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

AzkabanExecutorServer

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

Azkaban三种部署模式

solo-server模式

DB使用的是一个内嵌的H2,Web Server和Executor Server运行在同一个进程里。这种模式包含Azkaban的所有特性,但一般用来学习和测试。

two-server模式

DB使用的是MySQL,MySQL支持master-slave架构,Web Server和Executor Server运行在不同的进程中。

分布式multiple-executor模式

DB使用的是MySQL,MySQL支持master-slave架构,Web Server和Executor Server运行在不同机器上,且有多个Executor Server。
 

编译安装

1、下载源码

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

git clone [email protected]:azkaban/azkaban.git

2、编译

进入到下载的azkaban目录中进行编译:(提前安装好git,gradle,jdk8)

# 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.62

# cp azkaban-db/build/distributions/azkaban-db-3.62.0-7-g4f2f631.tar.gz azkaban_3.62/

# cp azkaban-web-server/build/distributions/azkaban-web-server-3.62.0-7-g4f2f631.tar.gz azkaban_3.62/

# cp azkaban-solo-server/build/distributions/azkaban-solo-server-3.62.0-7-g4f2f631.tar.gz azkaban_3.62/

# cp azkaban-exec-server/build/distributions/azkaban-exec-server-3.62.0-7-g4f2f631.tar.gz azkaban_3.62/

解压:

# cd azkaban_3.62

# tar xvf azkaban-solo-server-3.62.0-7-g4f2f631.tar.gz

# tar xvf azkaban-exec-server-3.62.0-7-g4f2f631.tar.gz

# tar xvf azkaban-web-server-3.62.0-7-g4f2f631.tar.gz

# tar xvf azkaban-db-3.62.0-7-g4f2f631.tar.gz

3、配置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;

> EXIT

3、导入建表语句


mysql -uazkaban -p

> SOURCE azkaban_3.62/azkaban-db-3.62.0-7-g4f2f631/create-all-sql-3.62.0-7-g4f2f631.sql;

4、配置Azkaban

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

1. 本文将采用multiple executor mode安装模式,组件分配如下:

node1 azkaban-exec-server

node2 azkaban-exec-server

node3 azkaban-web-server

node3 mysql-server

在node3上创建/opt/Azkaban-web-server目录,把编译好的软件azkaban-web-server拷贝到该目录

在node1,node2上创建目录/opt/Azkaban-exec-server目录,把编译好的软件azkaban-exec-server拷贝到该目录

2. 配置Azkaban Web Server

2-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]: 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=YY, OU=YY, O=YY, L=shanghai, ST=shanghai, C=CN correct?

[no]: y

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

2-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

2-3. 用户配置

在conf/azkaban-users.xml添加管理员用户及密码:

<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>

2-4. 启动web-server

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

# bin/start-web.sh

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

 

3. 配置 Azkaban Executor Server

3-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

3-2. 启动exec-server

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

#  bin/start-exec.sh 

注意:在这种模式下,先要启动exec-server,再启动web-server


5、问题

1. Error: HADOOP_HOME is not set. Hadoop job types will not run properly.

export HADOOP_HOME=...

2. java.lang.IllegalArgumentException: The datetime zone id 'Asia/Shangha' is not recognised

配置文件中时区配置错误,修正即可。Asia/Shanghai

3. azkaban.executor.ExecutorManagerException: No active executors found

修改数据库executors表中的active字段为1,并且在关闭exector时使用kill -9,不能使用shutdown-exec.sh,否则要重新设置executors表中的active字段为1。

4. javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?

在web页面登陆时,使用https替换http。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章