azkaban 学习日志
azkaban 封装了crontab。
1. azkaban简介
- 是由领英退出的一款开源免费的工作流调度器软件
1.1 特点
- 功能强大 可以调度几乎所有软件的执行(command)
- 配置简单 job配置文件
- 提供了web页面使用
- java语言开发 源码清晰可见 可以进行二次开发
1.2 架构

- web服务器 :对外提供web服务 用户在页面上进行项目的相关管理
- executor服务器:负责具体的工作流的调度提交。
- 数据库:用于保存工作流相关信息(比如:mysql)
1.3 Azkaban 三种部署模式
1. solo server mode 该模式中 webServer 和 executorServer 运行在同一个进程中,进程名是
AzkabanSingleServer。使用自带的 H2 数据库。这种模式包含 Azkaban 的所有 特性,但一般用来学习和测试。
2. two-server mode 该模式使用 MySQL 数据库, Web Server 和 Executor Server 运行在不同 的进程中。
3. multiple-executor mode 该模式使用 MySQL 数据库, Web Server 和 Executor Server 运行在不同 的机器中。且有多个 Executor Server。该模式适用于大规模应用。
2–azkaban–介绍、架构、部署模式
- Azkaban是由linkedin(领英)公司推出的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
- azkaban的特点
- · 提供功能清晰,简单易用的Web UI界面
· 提供job配置文件快速建立任务和任务之间的依赖关系
· 提供模块化和可插拔的插件机制,原生支持command、Java、Hive、Pig、Hadoop
基于Java开发,代码结构清晰,易于二次开发
- · 提供功能清晰,简单易用的Web UI界面
- azkaban的架构
- mysql服务器: 存储元数据,如项目名称、项目描述、项目权限、任务状态、SLA规则等
- AzkabanWebServer:对外提供web服务,使用户可以通过web页面管理。职责包括项目管理、权限授权、任务调度、监控executor。
- AzkabanExecutorServer:负责具体的工作流的提交、执行。
- 部署模式
- solo server mode
- tow-server mode
- multiple-executor mode
3–azkaban–安装部署–源码编译
- 略
- 依赖网速
- 可以直接使用提供好的编译后的软件。
04–azkaban–安装部署–solo server模式安装–azkaban使用初体验
- 解压配置
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的内存,剩余内存不足则会报异常
- 启动
cd azkaban-solo-server-0.1.0-SNAPSHOT/
bin/start-solo.sh
注:启动/关闭必须进到azkaban-solo-server-0.1.0-SNAPSHOT/目录下。 - 8081
- 必须在azkaban的根目录下 bin/start-solo.sh
- 在使用azkaban的时候,编写xxx.job配置文件,在文件中,不能出现无意义的空格
- 可以构建有依赖关系的job
05–azkaban–安装部署–two server模式安装–服务器配置上
- 节点规划
角色 HOST
MySQL node-1
web‐server和exec‐server不同进程 Node-2 - mysql配置初始化
node03:
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/create-all-sql-0.1.0-SNAPSHOT.sql; #加载初始化sql创建表 - web-server服务器配置
node02:
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
- 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=node03
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
06–azkaban–安装部署–two server模式安装–服务器配置下
- mysql 配置初始化
- webserver服务器配置
- exec-server服务器配置
- 集群启动
- 在exec根目录下启动exec
- 在web根目录下启动web
- 激活
- exec curl -G "node01:$(<./executor.port)/executor?action=activate" && echo
07–azkaban–安装部署–multiple-executor模式&executor激活问题
- scp exec 到node03
- 手动激活
- `execcurl -G "node02:$(<./executor.port)/executor?action=activate" && echo`
以上指令的node-3需要根据自己的虚拟机命名来设置
- azkaban调度总结
- 理论上任何一款软件,只有可以通过shell command执行 都可以转化成为azkaban的调度执行
- type=command command = sh xxx.sh
job依赖调度
创建有依赖关系的多个job描述
第一个job:foo.job
# foo.job
type=command
command=echo foo
第二个job:bar.job依赖foo.job
# bar.job
type=command
dependencies=foo
command=echo bar
将所有job资源文件打到一个zip包中
在azkaban的web管理界面创建工程并上传zip包
启动工作流flow
3.HDFS任务调度
创建job描述文件
# fs.job
type=command
command=sh hdfs.sh
#!/bin/bash
/export/servers/hadoop-2.7.5/bin/hadoop fs -mkdir /azaz666

hadoop的hdfs下的fs 命令,整体命令(hadoop fs -mkdir /azaz666)用于创建azaz666文件夹
将job资源文件打包成zip文件
通过azkaban的web管理平台创建project并上传job压缩包
启动执行该job
4.MAPREDUCE任务调度
mr任务依然可以使用command的job类型来执行
创建job描述文件,及mr程序jar包(示例中直接使用hadoop自带的example jar)
mrwc.job
# mapreduce_wordcount.job
type=command
command=/export/servers/hadoop-2.7.5/bin/hadoop jar hadoop-mapreduce-examples-2.7.5.jar wordcount /wc/input /wc/output

-
需要在把hadoop文件夹里的jar包一起打包
创建输入和输出文件夹:hadoop fs -mkdir -p /wc/input 创建输入文件夹里要输入的文件
将所有job资源文件打到一个zip包中
在azkaban的web管理界面创建工程并上传zip包
启动job
5.HIVE脚本任务调度
创建job描述文件和hive脚本
Hive脚本: test.sql
use default;
drop table aztest;
create table aztest(id int,name string) row format delimited fields terminated by ',';
load data inpath '/aztest/hiveinput' into table aztest;
create table azres as select * from aztest;
insert overwrite directory '/aztest/hiveoutput' select count(1) from aztest;
Job描述文件:hivef.job
hivef.job
type=command
command=/home/hadoop/apps/hive/bin/hive -f 'test.sql'
将所有job资源文件打到一个zip包中创建工程并上传zip包,启动job
6.定时任务调度
除了手动立即执行工作流任务外,azkaban也支持配置定时任务调度。开启方式如下:
首页选择待处理的project

上述图片中,选择左边schedule表示配置定时调度信息,选择右边execute表示立即执行工作流任务。
Azkaban是一款由LinkedIn开发的开源工作流调度器,它提供了直观的Web UI,支持job配置文件定义任务依赖。文章详细介绍了Azkaban的特性、架构、三种部署模式,并通过实例讲解了HDFS、MAPREDUCE、HIVE任务调度以及定时任务的配置和执行。
2213

被折叠的 条评论
为什么被折叠?



