目录

一、Azkaban简介

Azkaban是什么有啥用

Azkaban的功能特点

二、Azkaban搭建

三、Azkaban使用

单个独立任务

多个任务工作流



一、Azkaban简介

Azkaban是什么有啥用

  • Azkaban是一套简单的任务调度服务,整体包括三部分webserver、dbserver、executorserver。
  • Azkaban是由Linkedin开源的一个Java项目,批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。
  • Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

Azkaban的功能特点

  • Web用户界面
  • 方便上传工作流
  • 方便设置任务之间的关系
  • 工作流调度
  • 认证/授权
  • 能够杀死并重启工作流
  • 模块化和可插拔的插件机制
  • 项目工作区
  • 工作流和任务的日志记录和审计

二、Azkaban搭建


上传安装包至node001节点:

akka java 任务分发_运维

解压

tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C /opt/azkaban

tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C /opt/azkaban/

tar -zxvf azkaban-web-server-2.5.0.tar.gz -C /opt/azkaban/

akka java 任务分发_服务器_02

改名

mv /opt/azkaban/azkaban-executor-2.5.0/ /opt/azkaban/executor

mv /opt/azkaban/azkaban-web-2.5.0/ /opt/azkaban/web

mv /opt/azkaban/azkaban-2.5.0/ /opt/azkaban/sql

 

akka java 任务分发_akka java 任务分发_03

环境变量配置

终端输入:vim /etc/profile

 末行加入

export EXECUTOR_HOME=/opt/azkaban/executor
export PATH=$PATH:$EXECUTOR_HOME/bin

export WEB_HOME=/opt/azkaban/web
export PATH=$PATH:$WEB_HOME/bin

 重新加载配置文件:source /etc/profile

登录mysql

akka java 任务分发_akka java 任务分发_04

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hive               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

mysql> create database azkaban;   # 创建azkaban数据库
Query OK, 1 row affected (0.00 sec)

mysql> use azkaban;    # 使用zakaban数据库
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql> source /opt/azkaban/sql/create-all-sql-2.5.0.sql  # 初始化,创建默认表
Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.02 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.02 sec)

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.00 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)

mysql> exit;
Bye
[root@node001 azkaban]#

配置jetty

  • Jetty和Tomcat为目前全球范围内最著名的两款开源的webserver/servlet容器。 它们的实现都遵循Java Servlet规范,相对Tomcat而言Jetty更轻量级、更灵活。总的来说,Jetty更满足公有云的分布式环境的需求,而Tomcat更符合企业级环境。
  • jetty已经内嵌到azkaban中。只需通过命令配置,不需要下载安装。

终端输入:keytool -keystore keystore -alias jetty -genkey -keyalg RSA

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

Enter key password for <jetty>
	(RETURN if same as keystore password):  # azkaban
Re-enter new password: # azkaban

Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore keystore -destkeystore keystore -deststoretype pkcs12".

azkaban.properties配置文件

终端输入:vim /opt/azkaban/web/conf/azkaban.properties

#Azkaban Personalization Settings
# 服务器名称,用于服务器上方显示名称
azkaban.name=Test
# 描述信息
azkaban.label=My Local Azkaban
# 颜色配置
azkaban.color=#FF3601
# 默认servlet路径
azkaban.default.servlet.path=/index
# 修改为绝对地址,不然web页面没有js效果
web.resource.dir=/opt/azkaban/web/web  
# 修改时区为自己本地时区    
default.timezone.id=Asia/Shanghai          

#Azkaban UserManager class
# 用户权限管理默认类
user.manager.class=azkaban.user.XmlUserManager
# 修改为绝对地址
user.manager.xml.file=/opt/azkaban/web/conf/azkaban-users.xml     

#Loader for projects
# global配置文件所在地址
executor.global.properties=conf/global.properties 
azkaban.project.dir=projects

database.type=mysql
# mysql端口号
mysql.port=3306     
# 部署mysql的节点地址
mysql.host=192.168.1.101   
# mysql 使用上文创建的azkaban数据库 
mysql.database=azkaban    
# mysql 用户名
mysql.user=root   
# mysql 密码
mysql.password=root    
# mysql 最大连接数
mysql.numconnections=100

# Velocity dev mode
velocity.dev.mode=false

# Azkaban Jetty server properties.
# jetty.maxThreads=25
# jetty ssh端口
jetty.ssl.port=8443
# jetty端口
jetty.port=8081
# 修改为绝对地址
jetty.keystore=/opt/azkaban/web/keystore   
# 上文使用keytool -keystore keystore -alias jetty -genkey -keyalg RSA命令时自己输入的密码
jetty.password=azkaban   
jetty.keypassword=azkaban
# 修改为绝对地址
jetty.truststore=/opt/azkaban/web/keystore   
jetty.trustpassword=azkaban

# Azkaban Executor settings
executor.port=12321

# mail settings
mail.sender=
mail.host=
job.failure.email=
job.success.email=

lockdown.create.projects=false

cache.directory=cache

azkaban-users.xml配置

<azkaban-users>
	<user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
	<user username="metrics" password="metrics" roles="metrics"/>
    # 如下添加的是自定义用户,相当于注册的功能,将可以使用此username和password登录web页面
	<user username="libing" password="libing" roles="admin, metrics"/>
	<role name="admin" permissions="ADMIN" />
	<role name="metrics" permissions="METRICS"/>
</azkaban-users>

启动azkaban web server

终端输入:azkaban-web-start.sh

akka java 任务分发_sql_05

web页面

akka java 任务分发_mysql_06

akka java 任务分发_运维_07

配置Azkaban Executor Server

进入Executor 的conf目录:cd /opt/azkaban/executor/conf

azkaban.properties配置

#Azkaban
default.timezone.id=Asia/Shanghai

# Azkaban JobTypes Plugins
azkaban.jobtype.plugin.dir=plugins/jobtypes

#Loader for projects
executor.global.properties=/opt/azkaban/executor/conf/global.properties
azkaban.project.dir=projects


# 主要就修改mysql用户名和密码
database.type=mysql
mysql.port=3306
mysql.host=192.168.1.101
mysql.database=azkaban
mysql.user=root
mysql.password=root
mysql.numconnections=100

# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30

启动Executor

azkaban-executor-start.sh

akka java 任务分发_运维_08

 三、Azkaban使用

  • projects:最重要的部分,创建一个工程,所有flows将在工程中运行。
  • scheduling: 显示定时任务
  • executing: 显示当前运行的任务
  • history: 显示历史运行任务

单个独立任务

1. 创建project

akka java 任务分发_服务器_09

2. 定义一个job

任务如何执行,任务具体做什么是在job文件中定义

# 本地新建一个command.job文件,文件中的内容末尾不要有空格,内容如下:

# command.job
type=command
command=mkdir /opt/test_azkaban

 3.将job定义文件打包成zip包

akka java 任务分发_sql_10

4. upload任务压缩包至项目

akka java 任务分发_mysql_11

上传后,如果想看job的内容是什么,可以在job command中可以查看解析出任务内容

akka java 任务分发_akka java 任务分发_12

5. 查看任务,执行任务

点击Flows中 command任务,可以进入到任务的具体界面,Execute Flow 可以执行任务

akka java 任务分发_akka java 任务分发_13

akka java 任务分发_akka java 任务分发_14

成功生成了对应文件

akka java 任务分发_运维_15

多个任务工作流

定义job任务

文件one.jop内容如下

# one.job
type=command
command=mkdir /opt/one

文件two.jop内容如下

# two.job
type=command
# dependencies=one 意思是two这个job任务,依赖one这个任务,定义了这个参数,则意味着他们是先后执行,two需要one执行完成后再执行
dependencies=one
command=touch /opt/one/two.txt

将job定义文件打包成zip包

akka java 任务分发_服务器_16

依照上文将压缩包上传至项目中

akka java 任务分发_服务器_17

 执行任务

akka java 任务分发_sql_18

 

akka java 任务分发_sql_19