Azkaban环境安装及使用

前言

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


image.png

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

设置运行时间

查看运行日志

点击查看详情

你可能感兴趣的:(Azkaban环境安装及使用)