大数据Azkaban快速入门

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 大数据Azkaban快速入门

1 Azkaban简介

azkaban

是由领英退出的一款开源免费的工作流调度器软件

特点

功能强大 可以调度几乎所有软件的执行(command)

配置简单 job配置文件

提供了web页面使用

java语言开发 源码清晰可见 可以进行二次开发

架构

web服务器 :对外提供web服务 用户在页面上进行项目的相关管理

executor服务器:负责具体的工作流的调度提交。

数据库:用于保存工作流相关信息(比如:mysql)

部署模式

单节点模式:web、executor在同一个进程 适用于测试体验

two-server:web、executor在不同的进程中 可以使用第三方数据库

mutil-executor-server:web、executor在不同的机器上 可以部署多个executor服务器

安装部署


单节点部署模式 注意时区 内存检测的关闭


启动时候必须在安装包的根目录下进行启动

    bin/start-solo.sh  正确
    ./start-solo.sh  错误

azkaban开发流程


编写job的配置文件 xxxxx.job

    type=command
    command=xxxx

把所有job配置打成一个zip的压缩包


登录页面node-1:8081 创建工程(默认用户名密码都是azkaban)


上传zip压缩包


选择调度schduler或者立即执行executor工程。


two server模式部署


该模式的特点是web服务器和executor服务器分别位于不同的进程中

使用第三方的数据库进行数据的保存 :mysql

安装部署注意事项

先对mysql进行初始化操作

配置azkaban.properties 注意时区 mysql相关 ssl

启动时候注意需要自己手动的激活executor服务器 在根目录下启动

如果启动出错 通过安装包根目录下的日志进行判断

访问的页面https

multiple-executor部署模式


所谓的 multiple-executor指的是可以在多个机器上分别部署executor服务器


相当于做了一个负载均衡


特别注意:executor启动(包括重启)的时候 默认不会激活 需要自己手动激活


对应的mysql中的表executors active :0 表示未激活 1表示激活


可以自己手动修改数据提交激活 也可以使用官方的命令请求激活

curl -G "node-3:$(<./executor.port)/executor?action=activate" && echo

azkaban调度总结

理论上任何一款软件,只有可以通过shell command执行 都可以转化成为azkaban的调度执行

type=command command = sh xxx.sh

2 工作流

2.1 为什么需要工作流调度系统

工作流(Workflow),指“业务过程的部分或整体在计算机应用环境下的自动化”。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。工作流解决的主要问题是:为了实现某个业务目标,利用计算机软件在多个参与者之间按某种预定规则自动传递文档、信息或者任务。一个完整的数据分析系统通常都是由多个前后依赖的模块组合构成的:数据采集、数据预处理、数据分析、数据展示等。各个模块单元之间存在时间先后依赖关系,且存在着周期性重复。为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行。


一个完整的数据分析系统通常都是由大量任务单元组成:Shell 脚本程序,Java 程序,MapReduce 程序、Hive 脚本等

各任务单元之间存在时间先后及前后依赖关系

为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行;

74431ecdc1d44271bc6d54bc01973698.png

2.2 工作流调度实现方式

简单的任务调度:直接使用 linux 的 crontab 来定义,但是缺点也是比较明

显,无法设置依赖。

复杂的任务调度:自主开发调度平台,使用开源调度系统,比如 azkaban、

Apache Oozie、Cascading、Hamake 等。

其中知名度比较高的是 Apache Oozie,但是其配置工作流的过程是编写大

量的 XML 配置,而且代码复杂度比较高,不易于二次开发。


2.3 工作流调度工具之间对比

下面的表格对四种 hadoop 工作流调度器的关键特性进行了比较,尽管这些工作流调度器能够解决的需求场景基本一致,但在设计理念,目标用户,应用场景等方面还是存在显著的区别,在做技术选型的时候,可以提供参考。


a75a99b248b647b2b8404cabee853c72.png

3 Azkaban 调度器

3.1 Azkaban 介绍

Azkaban 是由 linkedin(领英)公司推出的一个批量工作流任务调度器,用

于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban 使用 job 配

置文件建立任务之间的依赖关系,并提供一个易于使用的 web 用户界面维护和跟

踪你的工作流。

Azkaban 功能特点:


提供功能清晰,简单易用的 Web UI 界面

提供 job 配置文件快速建立任务和任务之间的依赖关系

提供模块化和可插拔的插件机制,原生支持 command、Java、Hive、Pig、Hadoop

基于 Java 开发,代码结构清晰,易于二次开发

3.2 Azkaban 原理架构

mysql 服务器: 存储元数据,如项目名称、项目描述、项目权限、任务状态、SLA 规则等AzkabanWebServer:对外提供 web 服务,使用户可以通过 web 页面管理。职责包括项目管理、权限授权、任务调度、监控 executor。

AzkabanExecutorServer:负责具体的工作流的提交、执行。


3.3 Azkaban 三种部署模式

3.3.1 solo server mode

该模式中 webServer 和 executorServer 运行在同一个进程中,进程名是AzkabanSingleServer。使用自带的 H2 数据库。这种模式包含 Azkaban 的所有特性,但一般用来学习和测试。


3.3.2 two-server mode

该模式使用 MySQL 数据库, Web Server 和 Executor Server 运行在不同的进程中。


3.3.3 multiple-executor mode

该模式使用 MySQL 数据库, Web Server 和 Executor Server 运行在不同的机器中。且有多个 Executor Server。该模式适用于大规模应用。


4 Azkaban 源码编译

Azkaban3.x 在安装前需要自己编译成二进制包。

并且提前安装好 Maven、Ant、Node 等软件,具体请参考附件资料


4.1 编译环境

yum install –y git

yum install –y gcc-c++


4.2 下载源码解压

wget https://github.com/azkaban/azkaban/archive/3.51.0.tar.gz

tar -zxvf 3.51.0.tar.gz

cd ./azkaban-3.51.0/

1

2

3

4.3 编译源码

./gradlew build installDist -x test

Gradle 是一个基于 Apache Ant 和 Apache Maven 的项目自动化构建工具。

-x test 跳过测试。(注意联网下载 jar 可能会失败、慢)

9d3087c248ab4a4390ac6f98b785e586.png



16a6c900e5f247f68b238c5a1c430f33.png


4.4 编译后安装包路径

编译成功之后就可以在指定的路径下取得对应的安装包了。

3754a83292fb402b801e5dbcd5d378be.png


#solo-server 模式安装包路径
azkaban-solo-server/build/distributions/
#two-server 模式和 multiple-executor 模式 web-server 安装包路径
azkaban-web-server/build/distributions/
#two-server 模式和 multiple-executor 模式 exec-server 安装包路径
azkaban-exec-server/build/distributions/
azkaban-db/build/distributions/

44a178231340432a8dcafdacbb4091d6.png


数据库相关安装包路径

4 Azkaban 安装部署

4.1 solo-server 模式部署

4.1.1 节点规划

73d40374e4814938b36639e88ee5c80b.png


4.1.2 解压配置

mkdir /export/servers/azkaban
tar -zxvf azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz –C /export/servers/azkaban/
vim conf/azkaban.properties
default.timezone.id=Asia/Shanghai #修改时区
vim plugins/jobtypes/commonprivate.properties

添加:memCheck.enabled=false

azkaban 默认需要 3G 的内存,剩余内存不足则会报异常


4.1.3 启动验证

cd azkaban-solo-server-0.1.0-SNAPSHOT/
bin/start-solo.sh

2a39f4969e1d43cdbacbe599f627749e.png


注:启动/关闭必须进到 azkaban-solo-server-0.1.0-SNAPSHOT/目录下。

AzkabanSingleServer(对于 Azkaban solo‐server 模式,Exec Server 和 Web Server 在

同一个进程中)


4.1.4 登录 web 页面

82966ba60a354c3b9bd1bc1829dbb295.png


访问 Web Server=>http://node-1:8081/ 默认用户名密码 azkaban


4.1.5 初体验测试

http://node-1:8081/index 登录=>Create Project=>Upload zip 包 =>execute flow

执行一步步操作即可。

创建两个文件 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"

创建工程:


6bf9d911fa9b468caa11a8b11fd9d552.png

上传 zip 压缩包:

9ad3418e306d4be1859ce5ad970a0de5.png


execute 执行:


defc3d3e48654129975367f78e716912.png

执行页面:

aa9cc03bedb34988942ff8df5cbaf728.png


执行结果查看:

c049fafb29a5443498f7189cc3d3a054.png


4.2 two-server 模式部署

4.2.1 节点规划

1810cef6e99345beac1a132002ded56f.png


4.2.2 mysql 配置初始化

node-1:

mkdir /export/servers/azkaban

tar -zxvf azkaban-db-0.1.0-SNAPSHOT.tar.gz –C /export/servers/azkaban/

Mysql 上创建对应的库、增加权限、创建表

mysql> CREATE DATABASE azkaban_two_server; #创建数据库

mysql> use azkaban_two_server;

mysql> source /export/servers/azkaban/azkaban-db-0.1.0-SNAPSHOT/createall-sql-0.1.0-SNAPSHOT.sql; #加载初始化 sql 创建表


4.2.3 web-server 服务器配置

node-2:

mkdir /export/servers/azkaban

tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz –C /export/servers/azkaban/

tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz –C /export/servers/azkaban/

生成 ssl 证书:

keytool -keystore keystore -alias jetty -genkey -keyalg RSA

运行此命令后,会提示输入当前生成 keystore 的密码及相应信息,输入的密

码请记住(所有密码统一以 123456 输入)。

完成上述工作后,将在当前目录生成 keystore 证书文件,将 keystore 拷贝

到 azkaban web 服务器根目录中。 如: cp keystore azkaban-web-server-0.1.0-SNAPSHOT/

配置 conf/azkaban.properties:

# Azkaban Personalization Settings
azkaban.name=Test
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=web/
default.timezone.id=Asia/Shanghai # 时区注意后面不要有空格
# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=conf/azkaban-users.xml
# Azkaban Jetty server properties. 开启使用 ssl 并且知道端口
jetty.use.ssl=true
jetty.ssl.port=8443
jetty.maxThreads=25
# Azkaban Executor settings 指定本机 Executor 的运行端口
executor.host=localhost
executor.port=12321
# KeyStore for SSL ssl 相关配置 注意密码和证书路径
jetty.keystore=keystore
jetty.password=123456
jetty.keypassword=123456
jetty.truststore=keystore
jetty.trustpassword=123456
# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=node-1
mysql.database=azkaban_two_server
mysql.user=root
mysql.password=hadoop
mysql.numconnections=100
#Multiple Executor 设置为 false
azkaban.use.multiple.executors=true
#azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1
azkaban.executorselector.comparator.Memory=1
azkaban.executorselector.comparator.LastDispatched=1
azkaban.executorselector.comparator.CpuUsage=1
添加 azkaban.native.lib=false 和 execute.as.user=false 属性:
mkdir -p plugins/jobtypes
vim commonprivate.properties
azkaban.native.lib=false
execute.as.user=false
memCheck.enabled=false

4.2.4 exec-server 服务器配置

配置 conf/azkaban.properties:

# Azkaban Personalization Settings
azkaban.name=Test
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=web/
default.timezone.id=Asia/Shanghai
# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=conf/azkaban-users.xml
# Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects
# Where the Azkaban web server is located
azkaban.webserver.url=https://node-2:8443
# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=node-1
mysql.database=azkaban_two_server
mysql.user=root
mysql.password=hadoop
mysql.numconnections=100
# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30

4.2.5 集群启动

先启动 exec-server

再启动 web-server。

启动 webServer 之后进程失败消失,可通过安装包根目录下对应启动日志进行排查。


c74cf95c3c9f4fce83e6af809776d7ea.png


需要手动激活 executor

cd /export/servers/azkaban/execserver

curl -G “node-2:$(<./executor.port)/executor?action=activate” && echo

a9ab55477b1e4723b4010b25137ecb0e.png


然后重新启动 webServer 就可以了。


4.3 multiple-executor 模式部署

multiple-executor 模式是多个 executor Server 分布在不同服务器上,只需要

将 azkaban-exec-server 安装包拷贝到不同机器上即可组成分布式。


4.3.1 节点规划

44a14afc5e154632847fca64405cb85a.png


4.3.2 scp executor server 安装包到 node-3

启动之后,需要手动激活 executor

cd /export/servers/azkaban/execserver
curl -G "node-3:$(<./executor.port)/executor?action=activate" && echo


5abe4cc0728e4bf785ba196cb00dadf6.png

aa3166b8acae494f8487f3907323cd6e.png

4.3.3 Azkaban 多 Executor 模式注意事项

Azkaban 多 Executor 模式是指,在集群中多个节点部署 Executor。在这种模式下,

Azkaban web Server 会根据策略,选取其中一个 Executor 去执行任务。

为确保所选的 Executor 能够准确的执行任务,我们须在以下两种方案任选其一,推荐使

用方案二。

方案一:指定特定的 Executor(hadoop102)去执行任务。

1)在 MySQL 中 azkaban 数据库 executors 表中,查询 hadoop102 上的 Executor 的 id。


mysql> use azkaban;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from executors;
+----+-----------+-------+--------+
| id | host | port | active |
+----+-----------+-------+--------+
1 3 5985 2 4 36363 | 3 | hadoop102 | 12321 | 1 |
+----+-----------+-------+--

2)在执行工作流程时加入 useExecutor 属性,如下

c79e0bef2cf7414d875526ad113512d7.png

方案二:在 Executor 所在所有节点部署任务所需脚本和应用。


相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
大数据 Java Shell
大数据Azkaban常见工作流进阶实战
大数据Azkaban常见工作流进阶实战
142 0
|
SQL 分布式计算 大数据
大数据Spark SQL快速入门
大数据Spark SQL快速入门
164 0
|
SQL 分布式计算 监控
大数据Flume快速入门
大数据Flume快速入门
100 0
|
分布式计算 监控 大数据
大数据Spark快速入门
大数据Spark快速入门
127 0
|
6月前
|
大数据 索引 Python
Python大数据之pandas快速入门(二)
Python大数据之pandas快速入门(二)
66 0
|
6月前
|
存储 SQL 数据可视化
Python大数据之pandas快速入门(一)
Python大数据之pandas快速入门(一)
155 0
|
6月前
|
Ubuntu 大数据 Linux
【大数据组件】一篇文章让你快速入门Docker
【大数据组件】一篇文章让你快速入门Docker
77 0
|
6月前
|
Dubbo Java 应用服务中间件
大数据开发前置技能__Dubbox快速入门
大数据开发前置技能__Dubbox快速入门
30 0
|
大数据
大数据Azkaban失败任务预警
大数据Azkaban失败任务预警
218 0
|
大数据 Shell Windows
大数据Azkaban Work Flow实战
大数据Azkaban Work Flow实战
170 0