一、工作流
-
工作流产生背景
工作流(Workflow),指“业务过程的部分或整体在计算机应用环境下的自动化”。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。工作流解决的主要问题是:为了实现某个业务目标,利用计算机软件在多个参与者之间按某种预定规则自动传递文档、信息或者任务。
一个完整的数据分析系统通常都是由多个前后依赖的模块组合构成的:数据采集、数据预处理、数据分析、数据展示等。各个模块单元之间存在时间先后依赖关系,且存在着周期性重复。
为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行。
-
工作流调度实现方式
简单的任务调度:直接使用linux的crontab来定义,但是缺点也是比较明显,无法设置依赖。
复杂的任务调度:自主开发调度平台,使用开源调度系统,比如azkaban、Apache Oozie、Cascading、Hamake等。
其中知名度比较高的是Apache Oozie,但是其配置工作流的过程是编写大量的XML配置,而且代码复杂度比较高,不易于二次开发。
-
工作流调度工具之间对比
二、Azkaban概述
-
Azkaban介绍
Azkaban是由linkedin(领英)公司推出的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。 -
Azkaban功能特点
- 提供功能清晰,简单易用的Web UI界面
- 提供job配置文件快速建立任务和任务之间的依赖关系
- 提供模块化和可插拔的插件机制,原生支持command、Java、Hive、Pig、Hadoop
- 基于Java开发,代码结构清晰,易于二次开发
- Azkaban三种部署模式
-
solo server mode
该模式中webServer和executorServer运行在同一个进程中,进程名是AzkabanSingleServer。使用自带的H2数据库。这种模式包含Azkaban的所有特性,但一般用来学习和测试。 -
two-server mode
该模式使用MySQL数据库, Web Server和Executor Server运行在不同的进程中。 -
multiple-executor mode
该模式使用MySQL数据库, Web Server和Executor Server运行在不同的机器中。且有多个Executor Server。该模式适用于大规模应用。
三、Azkaban安装部署
solo-server模式部署
1.节点规划
2.解压配置
创建存放软件包目录:
mkdir /export/servers/azkaban
解压:
tar -zxvf azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz –C /export/servers/
修改azkaban.properties:
vim conf/azkaban.properties
default.timezone.id=Asia/Shanghai #修改时区
修改commonprivate.properties:
添加:memCheck.enabled=false #azkaban默认需要3G的内存,剩余内存不足则会报异常
3.启动验证
cd azkaban-solo-server-0.1.0-SNAPSHOT/
bin/start-solo.sh
注:启动/关闭必须进到azkaban-solo-server-0.1.0-SNAPSHOT/目录下。
AzkabanSingleServer(对于Azkaban solo‐server模式,Exec Server和Web Server在同一个进程中)
4.登录web页面
访问:http://node01:8081/
默认用户名密码:azkaban
5.验证
创建文件:
创建两个文件one.job two.job,内容如下,打包成zip包:
cat one.job
type=command
command=echo "this is job one"
cat two.job
type=command
dependencies=one
command=echo "this is job two"
测试:
http://node-1:8081/index登录=>Create Project=>Upload zip包 =>execute flow执行一步步操作即可。
结果:
two-server模式部署(以mysql和azkaban都装在node01节点为例)
1.节点规划
2.web-server服务器配置
- 上传压缩包到/export/soft中
将azkaban-sql-script-2.5.0.tar.gz
azkaban-web-server-2.5.0.tar.gz
azkaban-executor-server-2.5.0.tar.gz
上传到soft中
- 在node01上:
进入/export/soft目录:
cd /export/soft
创建/export/servers/azkaban_two_server目录:
mkdir /export/servers/azkaban_two_server
解压文件:
tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C ../servers/azkaban_two_server
tar -zxvf azkaban-web-server-2.5.0.tar.gz -C ../servers/azkaban_two_server
tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C ../servers/azkaban_two_server
- 生成ssl证书:
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
运行此命令后,会提示输入当前生成keystore的密码及相应信息,输入的密码请记住(所有密码统一以123456输入)。
完成上述工作后,将在当前目录生成keystore证书文件,将keystore拷贝到 azkaban web服务器根目录中:
cp keystore /export/servers/azkaban_two_server/azkaban-web-2.5.0/
- 配置conf/azkaban.properties
#Azkaban Personalization Settings
#服务器 UI 名称,用于服务器上方显示的名字
azkaban.name=CZXY
#描述
azkaban.label=MyAzkaban
#UI颜色
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
#默认 web server 存放 web 文件的目录
web.resource.dir=/export/servers/azkaban_two_server/azkaban-web-2.5.0/web
default.timezone.id=Asia/Shanghai
#Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=/export/servers/azkaban_two_server/azkaban-web-2.5.0/conf/azkaban-users.xml
#Loader for projects
executor.global.properties=/export/servers/azkaban_two_server/azkaban-executor-2.5.0/conf/global.properties
azkaban.project.dir=projects
#数据库类型
database.type=mysql
#端口号
mysql.port=3306
#连接IP
mysql.host=node01
mysql.database=azkaban_two_server
mysql.user=root
mysql.password=123456
#最大连接数
mysql.numconnections=100
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
#jetty服务器属性
#最大线程数
jetty.maxThreads=25
#jetty SSL端口
jetty.ssl.port=8443
#Jetty 端口
jetty.port=8081
#SSL 文件名(绝对路径)
jetty.keystore=/export/servers/azkaban_two_server/azkaban-web-2.5.0/keystore
#SSL 文件密码
jetty.password=123456
#Jetty 主密码与 keystore 文件相同
jetty.keypassword=123456
#SSL 文件名(绝对路径)
jetty.truststore=/export/servers/azkaban_two_server/azkaban-web-2.5.0/keystore
#SSL 文件密码
jetty.trustpassword=123456
# Azkaban Executor settings
executor.port=12321
# mail settings
mail.sender=qq2475855601@163.com
mail.host=smtp.163.com
mail.user=qq2475855601@163.com
mail.password=zh2475855601
lockdown.create.projects=false
cache.directory=cache
3.mysql配置初始化(在安装mysql软件的节点上执行)
Mysql上创建对应的库、增加权限、创建表:
#创建数据库
CREATE DATABASE azkaban_two_server;
#使用该数据库
use azkaban_two_server;
#加载初始化sql创建表
Source /export/servers/azkaban_two_server/azkaban-2.5.0/create-all-sql-2.5.0.sql;
4.exec-server服务器配置
- 配置conf/azkaban.properties
#Azkaban
default.timezone.id=Asia/Shanghai
# Azkaban JobTypes Plugins
azkaban.jobtype.plugin.dir=plugins/jobtypes
#Loader for projects
executor.global.properties=/export/servers/azkaban_two_server/azkaban-executor-2.5.0/conf/global.properties
azkaban.project.dir=projects
database.type=mysql
mysql.port=3306
mysql.host=node01
mysql.database=azkaban_two_server
mysql.user=root
mysql.password=123456
mysql.numconnections=100
# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
#线程数
executor.flow.threads=30
5.启动服务
启动executor服务器:
cd /export/servers/azkaban-two-server/executor
bin/azkaban-executor-start.sh
启动web服务器:
cd /export/servers/azkaban-two-server/server
bin/azkaban-web-start.sh
注意:先执行executor,再执行web,避免Web Server会因为找不到执行器启动失败。
6.验证
在浏览器输入:https://node01:8443,即可访问azkaban服务了