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

  1. 一个完整的数据分析系统通常都是由大量任务单元组成:Shell 脚本程序,Java 程序,MapReduce 程序、Hive 脚本等
  2. 各任务单元之间存在时间先后及前后依赖关系
  3. 为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行;
    在这里插入图片描述

2.2 工作流调度实现方式

简单的任务调度:直接使用 linux 的 crontab 来定义,但是缺点也是比较明
显,无法设置依赖。
复杂的任务调度:自主开发调度平台,使用开源调度系统,比如 azkaban、
Apache Oozie、Cascading、Hamake 等。
其中知名度比较高的是 Apache Oozie,但是其配置工作流的过程是编写大
量的 XML 配置,而且代码复杂度比较高,不易于二次开发。

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

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

3 Azkaban 调度器

3.1 Azkaban 介绍

Azkaban 是由 linkedin(领英)公司推出的一个批量工作流任务调度器,用
于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban 使用 job 配
置文件建立任务之间的依赖关系,并提供一个易于使用的 web 用户界面维护和跟
踪你的工作流。
Azkaban 功能特点:

  1. 提供功能清晰,简单易用的 Web UI 界面
  2. 提供 job 配置文件快速建立任务和任务之间的依赖关系
  3. 提供模块化和可插拔的插件机制,原生支持 command、Java、Hive、Pig、Hadoop
  4. 基于 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/

4.3 编译源码

./gradlew build installDist -x test
Gradle 是一个基于 Apache Ant 和 Apache Maven 的项目自动化构建工具。
-x test 跳过测试。(注意联网下载 jar 可能会失败、慢)

在这里插入图片描述

在这里插入图片描述

4.4 编译后安装包路径

编译成功之后就可以在指定的路径下取得对应的安装包了。
在这里插入图片描述

#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/

在这里插入图片描述

数据库相关安装包路径

4 Azkaban 安装部署

4.1 solo-server 模式部署

4.1.1 节点规划

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

在这里插入图片描述

注:启动/关闭必须进到 azkaban-solo-server-0.1.0-SNAPSHOT/目录下。
AzkabanSingleServer(对于 Azkaban solo‐server 模式,Exec Server 和 Web Server 在
同一个进程中)

4.1.4 登录 web 页面

在这里插入图片描述

访问 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"

创建工程:
在这里插入图片描述

上传 zip 压缩包:
在这里插入图片描述

execute 执行:
在这里插入图片描述

执行页面:
在这里插入图片描述

执行结果查看:
在这里插入图片描述

4.2 two-server 模式部署

4.2.1 节点规划

在这里插入图片描述

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 之后进程失败消失,可通过安装包根目录下对应启动日志进行排查。

在这里插入图片描述

需要手动激活 executor
cd /export/servers/azkaban/execserver
curl -G “node-2:$(<./executor.port)/executor?action=activate” && echo
在这里插入图片描述

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

4.3 multiple-executor 模式部署

multiple-executor 模式是多个 executor Server 分布在不同服务器上,只需要
将 azkaban-exec-server 安装包拷贝到不同机器上即可组成分布式。

4.3.1 节点规划

在这里插入图片描述

4.3.2 scp executor server 安装包到 node-3

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

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

在这里插入图片描述
在这里插入图片描述

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 属性,如下
在这里插入图片描述
方案二:在 Executor 所在所有节点部署任务所需脚本和应用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵广陆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值