一、简介
场景:
在做离线数仓的时候需要按照 一定的顺序定时的执行一些固定的job。这个工作流程中 的任务调度就交给azkaban来做。
大数据中场常用的类似 工具还有:oozie ceontab airflow等
特性:
- 可以利用cron表达式保证job按照规定的时间进行执行
- 可以兼容 任意版本 的hadoop
- 提供了友好的webUI 界面,可以通过界面 直接操作job
- 基于Java开发,代码结构清晰,易于二次开发
- 提供认证和授权
- 重试失败的job
结构:
关系型数据库(MySQL)
AzkabanWebServer
AzkabanExecutorServer
1 关系型数据库(MySQL)
Azkaban使用数据库存储大部分状态,AzkabanWebServer和AzkabanExecutorServer都需要访问数据库。
AzkabanWebServer使用数据库的原因如下:
项目管理:项目、项目权限以及上传的文件。
执行流状态:跟踪执行流程以及执行程序正在运行的流程。
以前的流程/作业:通过以前的作业和流程执行以及访问其日志文件进行搜索。
计划程序:保留计划作业的状态。
SLA:保持所有的SLA规则
AzkabanExecutorServer使用数据库的原因如下:
访问项目:从数据库检索项目文件。
执行流程/作业:检索和更新正在执行的作业流的数据
日志:将作业和工作流的输出日志存储到数据库中。
交互依赖关系:如果一个工作流在不同的执行器上运行,它将从数据库中获取状态。
2 AzkabanWebServer
AzkabanWebServer是整个Azkaban工作流系统的主要管理者,它负责project管理、用户登录认证、定时执行工作流、跟踪工作流执行进度等一系列任务。同时,它还提供Web服务操作的接口,利用该接口,用户可以使用curl或其他ajax的方式,来执行azkaban的相关操作。操作包括:用户登录、创建project、上传workflow、执行workflow、查询workflow的执行进度、杀掉workflow等一系列操作,且这些操作的返回结果均是json的格式。并且Azkaban使用方便,Azkaban使用以.job为后缀名的键值属性文件来定义工作流中的各个任务,以及使用dependencies属性来定义作业间的依赖关系链。这些作业文件和关联的代码最终以*.zip的方式通过Azkaban UI上传到Web服务器上。
3 AzkabanExecutorServer
以前版本的Azkaban在单个服务中具有AzkabanWebServer和AzkabanExecutorServer功能,目前Azkaban已将AzkabanExecutorServer分离成独立的服务器,拆分AzkabanExecutorServer的原因有如下几点:
某个任务流失败后,可以更方便的将其重新执行
便于Azkaban升级
AzkabanExecutorServer主要负责具体的工作流的提交、执行,可以启动多个执行服务器,它们通过mysql数据库来协调任务的执行。
二、安装配置
安装所需资料已上传到资源中Azkaban
1.单机安装
由于azkaban基于Java开发,安装前确保jdk环境安装好
- 上传文件到Linux上的/opt/moudus/
- 解压 tar -zxf azkaban-solo-server-3.81.0-1-g304593d.tar.gz -C /opt/installs/
- 修改文件名字 mv azkaban-solo-server-3.81.0-1-g304593d azkaban-solo-server
- 修改conf目录下的azkaban.properties配置文件
default.timezone.id=Asia/Shanghai #修改时区 jetty.port=8082 #配置azkabanweb服务器地址
- 修改plungs目录下的目录下的commonprivate.properties配置文件
memCheck.enabled=false #关闭执行节点内存检查,默认如果执行节点内存小于6GB,不会提交任务
- 启动 需要在azkaban-solo-server目录下启动 输入:
./bin/start-solo.sh
- 测试。在浏览器中输入主机的ip地址+8082 端口号访问。用户名和密码都是azkaban
- 关闭
./bin/shutdown-solo.sh
2.分布式环境下安装
安装前必须保证JDK已经安装成功并且配置了环境变量
1.因为需要用到数据库,首先需要准备好数据库
- 安装数据库
- 创建一个数据库
- 导入数据库的建表语句
- 验证
--先将.sql文件上传到hadoop11 Linux服务器上的/opt/data/
create database azkaban;
use azkaban;
source /opt/data/create-all-sql-3.81.0-1-g304593d.sql
show tables;
2.同步需要安装分布式环境的三台电脑的时间
在三台服务器上分别执行
yum install -y ntp
ntpdate cn.pool.ntp.org
clock -w
2.1在hadoop11 上安装Executor-Server并scp(发送到12、13上)
- 上传文件到Linux上的/opt/moudus/
- 解压 tar zxvf azkaban-exec-server-3.81.0-1-g304593d.tar.gz -C /opt/installs/
- 修改文件名字 mv azkaban-exec-server-3.81.0-1-g304593d azkaban-exec-server
- 修改conf目录下的azkaban.properties配置文件
default.timezone.id=Asia/Shanghai
jetty.port=8082
azkaban.webserver.url=http://192.168.77.201:8082
mysql.host=192.168.77.201
mysql.database=azkaban
mysql.user=root
mysql.password=123456
- 修改plungs目录下的目录下的commonprivate.properties配置文件
memCheck.enabled=false
- 启动 需要在azkaban-solo-server目录下启动 输入:
./bin/start-exec.sh
- 激活azkaban执行服务器(每次重启,都需要激活)
curl -G "localhost:$(<./executor.port)/executor?action=activate" && echo
- 测试。在浏览器中输入主机的ip地址+8082 端口号访问。用户名和密码都是azkaban
- 关闭
./bin/shutdown-solo.sh
- 传送到12、13上无需做任何操作
scp -R azkaban-exec-server root@hadoop12:/opt/installs/
scp -R azkaban-exec-server root@hadoop13:/opt/installs/
2.2在hadoop11 上安装webServe
- 上传文件到Linux上的/opt/moudus/
- 解压 tar zxvf azkaban-web-server-3.81.0-1-g304593d.tar.gz -C /opt/installs/
- 修改文件名字 mv azkaban-web-server-3.81.0-1-g304593d azkaban-web-server
- 修改conf目录下的azkaban.properties配置文件
default.timezone.id=Asia/Shanghai
jetty.port=8082
mysql.host=192.168.77.201
mysql.database=azkaban
mysql.user=root
mysql.password=123456
azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus #关闭对执行服务器内存检查-测试环境
-
启动 需要在azkaban-solo-server目录下启动 输入:
./bin/start-exec.sh
-
测试。在浏览器中输入主机的ip地址+8082 端口号访问。用户名和密码都是azkaban
-
关闭
./bin/shutdown-solo.sh
三、基础 使用
实战案例:
https://blog.csdn.net/qq_16146103/article/details/106207283