前言
Azkaban在LinkedIn上实现,以解决Hadoop作业依赖性问题。从ETL作业到数据分析产品,我们有一些需要按顺序运行的作业。
最初是单一服务器解决方案,随着这些年来Hadoop用户数量的增加,Azkaban已经发展成为一种更强大的解决方案。
Azkaban包含3个关键组成部分:
a.关系数据库(MySQL)
b.AzkabanWebServer
c.AzkabanExecutorServer
1.1、关系数据库(MySQL)
Azkaban使用MySQL来存储其大部分状态。AzkabanWebServer和AzkabanExecutorServer都可以访问数据库。
1.1.1AzkabanWebServer如何使用数据库?
项目管理 -项目,项目权限以及上载的文件。
执行流状态 -跟踪正在执行的流以及哪个执行器正在运行它们。
先前的流程/作业 -搜索先前执行的作业和流程以及访问其日志文件。
计划程序 -保留计划作业的状态。
SLA-保留所有sla规则
1.1.2AzkabanExecutorServer如何使用数据库?
访问项目 -从数据库中检索项目文件。
执行流/作业 -检索和更新正在执行的流的数据
日志 -将作业和流的输出日志存储到数据库中。
互流相关性 -如果流在其他执行程序上运行,它将从数据库获取状态。
1.2、AzkabanWebServer
AzkabanWebServer是所有Azkaban的主要管理器。它处理项目管理,身份验证,计划程序和执行监视。它还用作Web用户界面。
使用Azkaban很容易。Azkaban使用.job键值属性文件来定义工作流程中的各个任务,并使用dependencies属性来定义作业的依赖关系链。可以将这些作业文件和相关代码存档到中,.zip然后通过Azkaban UI或curl通过Web服务器上载。
1.3、AzkabanExecutorServer
以前的Azkaban版本在单个服务器中同时具有AzkabanWebServer和AzkabanExecutorServer功能。此后,执行器被分离到其自己的服务器中。拆分这些服务的原因有很多:我们将很快能够扩展执行的数量,并在失败的情况下依靠运行的执行器。此外,我们能够在对用户造成最小影响的情况下推出Azkaban的升级。随着Azkaban的使用量增加,我们发现,随着一天中所有时间成为“高峰”,升级Azkaban变得越来越困难。
2、安装
下载
azkaban-executor-2.5.0.zip
azkaban-web-2.5.0.zip
azkaban-sql-script-2.5.0.tar.gz
https://pan.baidu.com/s/13VeUBiOtfcNaS6HSLELr2A 提取码: tjwy
上传服务器如/home/azkaban目录下进行解压
[root@hadoop azkaban]#unzip azkaban-executor-2.5.0.zip
[root@hadoop azkaban]#unzip azkaban-web-2.5.0.zip
[root@hadoop azkaban]#tar -xzvf azkaban-sql-script-2.5.0.tar.gz
#重命名目录
[root@hadoop azkaban]# mv azkaban-2.5.0 azkaban
[root@hadoop azkaban]# mv azkaban-executor-2.5.0 azkaban-executor
[root@hadoop azkaban]# mv azkaban-web-2.5.0 azkaban-web
[root@hadoop azkaban]# ll
total 22760
drwxr-xr-x. 2 root root 4096 Feb 13 18:14 azkaban
drwxr-xr-x. 7 root root 4096 Dec 3 2015 azkaban-executor
-rw-r--r--. 1 root root 11150318 Feb 13 18:08 azkaban-executor-2.5.0.zip
-rw-r--r--. 1 root root 1928 Feb 13 18:08 azkaban-sql-script-2.5.0.tar.gz
drwxr-xr-x. 8 root root 4096 Dec 3 2015 azkaban-web
-rw-r--r--. 1 root root 12102703 Feb 13 18:08 azkaban-web-2.5.0.zip
2.1、 设置数据库
#数据库创建命令,尽管数据库名称不必为'azkaban'
mysql> create database azkaban;
Query OK, 1 row affected (0.02 sec)
###创建数据库用户例如:
#数据库创建命令。用户名不必为“ azkaban”
mysql> CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';
Query OK, 0 rows affected (0.11 sec)
###为用户授权授权
mysql> grant all on azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
###配置数据包大小
#配置数据包大小可能需要配置。默认情况下,MySQL的可允许数据包大小可能
#低得离谱。要增加它,您需要将属性max_allowed_packet设置为更高的值,例如1024M。
[root@hadoop azkaban]# vi /etc/my.cnf
在[mysqld]处添加以下内容:
max_allowed_packet = 1024M
#重启mysql
[root@hadoop azkaban]# service mysqld restart
Stopping mysqld: [ OK ]
Starting mysqld: [ OK ]
#创建Azkaban表
mysql> use azkaban;
Database changed
mysql> source /home/azkaban/azkaban/create-all-sql-2.5.0.sql;
Query OK, 0 rows affected (0.01 sec)
#查看创建的表
mysql> show tables;
+------------------------+
| Tables_in_azkaban |
+------------------------+
| active_executing_flows |
| active_sla |
| execution_flows |
| execution_jobs |
| execution_logs |
| project_events |
| project_files |
| project_flows |
| project_permissions |
| project_properties |
| project_versions |
| projects |
| properties |
| schedules |
| triggers |
+------------------------+
15 rows in set (0.00 sec)
2.2 、 创建SSL配置
# keytool -keystore keystore -alias jetty -genkey -keyalg RSA
#此处密码是azkaban
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]: zhang
What is the name of your organizational unit?
[Unknown]: pa
What is the name of your organization?
[Unknown]: pa
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]:
Is CN=zhang, OU=pa, O=pa, L=Shanghai, ST=Shanghai, C=Unknown correct?
[no]: yes
#此处jetty密码都是azkaban,后面配置azkaban.properties会用到
Enter key password for
(RETURN if same as keystore password):
Re-enter new password:
tzselect 使用交互式命令设置时区(Asia/Shanghai, 选北京就是上海)
#将当前目录生成 keystore证书文件拷贝到web服务器根目录中
[root@hadoop azkaban]## cp keystore /home/azkaban/azkaban-web
#拷贝该时区文件,覆盖系统本地时区配置
[root@hadoop azkaban]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#同步交通大学时间
ntpdate ntp.sjtu.edu.cn && hwclock -w
参考链接:https://blog.csdn.net/qq_33468857/article/details/82351937
azkaban web服务器配置及用户配置, 进入web服务器安装目录conf
2.3 、web服务器配置
[root@hadoop conf]# pwd
/home/azkaban/azkaban-web/conf
[root@hadoop conf]# cat azkaban.properties
#Azkaban Personalization Settings
azkaban.name=Test
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
#web/不写绝对路径会使得登录界面很丑
web.resource.dir=/home/azkaban/azkaban-web/web/
default.timezone.id=Asia/Shanghai
#Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
#此处要绝对路径
user.manager.xml.file=/home/azkaban/azkaban-web/conf/azkaban-users.xml
#Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects
database.type=mysql
mysql.port=3306
mysql.host=192.168.124.123
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.maxThreads=25
jetty.ssl.port=8443
jetty.port=8081
#此处写keystore的绝对路径
jetty.keystore=/home/azkaban/azkaban-web/keystore
jetty.password=azkaban
jetty.keypassword=azkaban
jetty.truststore=/home/azkaban/azkaban-web/keystore
jetty.trustpassword=azkaban
# Azkaban Executor settings
executor.port=12321
# mail settings
mail.sender=
mail.host=
job.failure.email=***@163.com #此处配置你的邮箱
job.success.email=***@163.com
lockdown.create.projects=false
cache.directory=cache
2.4 、用户配置
vi azkaban-users.xml
2.5 、executor服务器配置
进入执行服务器安装目录conf
[root@hadoop conf]# pwd
/home/azkaban/azkaban-executor/conf
[root@hadoop conf]# cat azkaban.properties
#Azkaban
default.timezone.id=Asia/Shanghai
# Azkaban JobTypes Plugins
azkaban.jobtype.plugin.dir=plugins/jobtypes
#Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects
database.type=mysql
mysql.port=3306
mysql.host=192.168.124.123
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30
2.6、 启动各个服务器
azkaban web服务器的启动与关闭, 注意: 只能在web服务器根目录运行
[root@hadoop azkaban-web]# ./bin/azkaban-web-start.sh
bin/azkaban-web-shutdown.sh
azkaban executor服务器的启动与关闭, 注意: 只能在执行服务器根目录运行
bin/azkaban-executor-start.sh
bin/azkaban-executor-shutdown.sh
2.7、登录Web用户界面, 进行操作
网址示例: https://192.168.124.123:8443
2.8 、启动
# azkaban-executor
[root@hadoop azkaban-executor]# ./bin/azkaban-executor-start.sh
Note: 1.
Azkaban 在启动是会生成两个日志文件azkaban-access.log/azkaban-webserver.log,
他们的生成位置是在你执行脚本的目录,所以建议你最好还是在AZKABAN_HOME 目录下执行启动脚本,
如果你喜欢在 ./bin 目录下启动,你需要将上文第2步骤的红色标记处修改目录位置为 ../${dir}
3、相关报错
a.javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
原因是对于JDK1.8版本但是低于1.8.0_151有缺陷
解决:
将下载的包里的两个文件直接覆盖到本地 Java\jre\lib\security
local_policy.jar
US_export_policy.jar
1.8.0_151和以后的版本,无需下载任何文件,只要修改Java\jre\lib\security\java.security文件,修改这一行注释并启用就可以了。
http://xwiz.cn/2018-05-09-java-ssl-ciphersuite
b.Unrecognized SSL message, plaintext connection?https请求遇到异常分析
原因是没有使用https,而是使用了http请求
c.javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
4、配置调度任务
首页有四个菜单
projects:最重要的部分,创建一个工程,所有flows将在工程中运行。
scheduling:显示定时任务
executing:显示当前运行的任务
history:显示历史运行任务
4.1、创建工程
4.2、点击创建完之后
Flows:工作流程,有多个job组成
Permissions:权限管理
Project Logs:工程日志
4.3、上传配置
创建job很简单,只要创建一个以.job结尾的文本文件就行了
#type的command,告诉azkaban用unix原生命令去运行,如原生命令或者shell脚本,当然也有其他类型
type=command
command=echo "This is a Azakaban's job"
将 job 资源文件打包
注意:只能是zip格式