- 一、概述
- 二、Azkaban介绍
- 三、安装部署
- 修改以下内容
- 单服务模式使用
- 3、multiple-executor模式部署
- Azkaban Personalization Settings
- Azkaban UserManager class
- Azkaban Jetty server properties. 开启使用ssl 并且知道端口
- 需要添加的内容 *
- KeyStore for SSL ssl相关配置 注意密码和证书路径
- Azkaban mysql settings by default. Users should configure their own usernameand password.
- 将以下的第二项注释,该项是检查资源的开关
- azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus # **
- Azkaban Personalization Settings
- Azkaban UserManager class
- Loader for projects
- Where the Azkaban web server is located
- Azkaban mysql settings by default. Users should configure their own username
- Azkaban Executor settings
- 四、使用方法
一、概述
1、工作流调度系统
一个完整的数据分析系统通常都是由大量任务单元组成:
- shell 脚本程序
- java 程序
- mapreduce 程序
- hive 脚本等
各任务单元之间存在时间先后及前后依赖关系,为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度任务的执行。
假如,我有这样一个需求,某个业务系统每天产生20G原始数据,每天都要对其进行处理,处理步骤如下所示:
- 通过Hadoop先将原始数据同步到HDFS上;
- 借助MapReduce计算框架对原始数据进行转换,生成的数据以分区表的形式存储到多张Hive表中;
- 需要对Hive中多个表的数据进行JOIN处理,得到一个明细数据Hive大表;
- 将明细数据进行各种统计分析,得到结果报表信息;
需要将统计分析得到的结果数据同步到业务系统中,供业务调用使用。
2、工作流调度实现方式
简单的任务调度
- 直接使用linux的crontab
复杂的任务调度
功能
- 两者均可以调度mapreduce,pig,java,脚本工作流任务
- 两者均可以定时执行工作流任务
- 工作流定义【区别】
- Azkaban使用Properties文件定义工作流
- Oozie使用XML文件定义工作流
- 工作流传参【相似】
- Azkaban支持直接传参,例如${input}
- Oozie支持参数和EL表达式,例如${fs:dirSize(myInputDir)}
- 定时执行【区别】
- Azkaban的定时执行任务是基于时间的
- Oozie的定时执行任务基于时间和输入数据
- 资源管理【区别】
- Azkaban有较严格的权限控制,如用户对工作流进行读/写/执行等操作
- Oozie暂无严格的权限控制
- 工作流执行【相似】
- Azkaban有两种运行模式,分别是solo server mode(executor server和web server部署在同一台节点)和multi server mode(executor server和web server可以部署在不同节点)
- Oozie作为工作流服务器运行,支持多用户和多工作流
二、Azkaban介绍
Azkaban是由linkedin(领英)公司推出的一个基于java的批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
Azkaban定义了一种KV文件(properties)格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
有如下功能特点:
- Web用户界面
- 方便上传工作流
- 方便设置任务之间的关系
- 调度工作流
- 架构角色
- mysql服务器 : 存储元数据,如项目名称、项目描述、项目权限、任务状态、SLA规则等
- AzkabanWebServer :对外提供web服务,使用户可以通过web页面管理。职责包括项目管理、权限授权、任务调度、监控executor
- AzkabanExecutorServer :负责具体的工作流的提交、执行
三、安装部署
1、Azkaban的安装准备工作
编译
这里选用
azkaban3.51.0
这个版本自己进行重新编译,编译完成之后得到我们需要的安装包进行安装cd /opt/lagou/software/
wget https://github.com/azkaban/azkaban/archive/3.51.0.tar.gz
tar -zxvf 3.51.0.tar.gz -C ../servers/
cd /opt/lagou/servers/azkaban-3.51.0/
yum -y install git
yum -y install gcc-c++
./gradlew build installDist -x test
注:Gradle是一个基于Apache Ant和Apache Maven的项目自动化构建工具。-x test 跳过测试。(注意联网下载jar可能会失败、慢)
上传编译后的安装文件
经过上面的编译后,得到如下文件:
在 linux122节点创建如下目录:【最好创建在资源比较充足的节点上】
azkaban 的 solo server 使用的是一个单节点的模式来进行启动服务的,只需要一个
azkaban-soloserver-0.1.0-SNAPSHOT.tar.gz
的安装包即可启动,所有的数据信息都是保存在H2这个azkaban默认的数据当中修改时区配置文件 ```shell cd /opt/lagou/servers/azkaban-solo-server-0.1.0-SNAPSHOT/conf vim azkaban.properties
修改以下内容
default.timezone.id=Asia/Shanghai
- 修改 `commonprivate.properties` 配置文件
- azkaban默认需要3G的内存,剩余内存不足则会报异常,因此要把该检查的选项关闭
```shell
cd /opt/lagou/servers/azkaban-solo-server-0.1.0-SNAPSHOT/plugins/jobtypes
vim commonprivate.properties
# 修改内容
execute.as.user=false
memCheck.enabled=false
③ 启动 solo-server
cd /opt/lagou/servers/azkaban/``azkaban-solo-server-0.1.0-SNAPSHOT
- 启动:
bin/start-solo.sh
- 关闭:
bin/shutdown-solo.sh
④ 浏览器页面访问
http://linux122:8081/index
需求:使用azkaban调度我们的shell脚本,执行linux的shell命令
具体步骤
创建普通文本文件 foo.job,文件内容如下
type=command command=echo 'hello world'
打成压缩包 foo.zip
- 上传压缩包到 Azkaban
3、multiple-executor模式部署
① 安装所需软件
- Azkaban Web服务安装包
azkaban-web-server-0.1.0-SNAPSHOT.tar.gz
- Azkaban Exec服务安装包
azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
- sql脚本
② 数据库准备
- mysql 安装在 linux123 中
- 先解压数据库的脚本文件 azkaban-db-0.1.0-SNAPSHOT.tar.gz
tar -zxvf azkaban-db-0.1.0-SNAPSHOT.tar.gz -C /opt/lagou/servers/azkaban
- 模仿 https://www.yuque.com/lancemai/bigdata/ypkpzf#5q6jH 创建用户 azkaban
进入 mysql 客户端:mysql -uazkaban -p12345678 并执行以下命令:
进入 linux122 节点,安装Azkaban-web-server
- 解压azkaban-web-server
mkdir /opt/lagou/servers/azkaban
tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz –C /opt/lagou/servers/azkaban/
- 进入 azkaban-web-server 根目录下
cd /opt/lagou/servers/azkaban/azkaban-web-server-0.1.0-SNAPSHOT
- 生成 ssl 证书:
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
- 注意:运行此命令后,会提示输入当前生成 keystore 的密码及相应信息,输入的密码请记住(所有密码统一为 :
azkaban
)- 修改 azkaban-web-server 的配置文件
cd /opt/lagou/servers/azkaban-web-server-3.51.0/conf
vim azkaban.properties
```shellAzkaban 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.port=8443 # ** jetty.maxThreads=25
需要添加的内容 *
KeyStore for SSL ssl相关配置 注意密码和证书路径
jetty.keystore=keystore jetty.password=azkaban jetty.keypassword=azkaban jetty.truststore=keystore jetty.trustpassword=azkaban
Azkaban mysql settings by default. Users should configure their own usernameand password.
database.type=mysql mysql.port=3306 mysql.host=linux123 # ** mysql.database=azkaban # ** mysql.user=azkaban # ** mysql.password=12345678 # ** mysql.numconnections=100
将以下的第二项注释,该项是检查资源的开关
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
- 添加属性
- 在 /opt/lagou/servers/azkaban/**azkaban-web-server**/ 下创建以下目录:
- `mkdir -p plugins/jobtypes`
- `cd plugins/jobtypes/`
- `vim commonprivate.properties`
```shell
azkaban.native.lib=false
execute.as.user=false
memCheck.enabled=false
④ 配置 Azkaban-exec-server
- 安装 Azkaban-exec-server 到 节点 linux121、linux123
- 上传 Azkaban-exec-server 安装包到 linux123 的 /opt/lagou/software
- 解压到 /opt/lagou/server/azkaban/
- 修改azkaban-exec-server的配置文件
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://linux122:8443 # *
Azkaban mysql settings by default. Users should configure their own username
and password. database.type=mysql mysql.port=3306 mysql.host=linux123 # * mysql.database=azkaban # * mysql.user=azkaban # * mysql.password=12345678 # * mysql.numconnections=100
Azkaban Executor settings
executor.maxThreads=50 executor.port=12321 # **添加内容* executor.flow.threads=30 ```
分发exec-server到linux121节点
先启动 exec-server 【linux121、linux123】
bin/start-exec.sh
再启动 web-server 【linux122】
bin/start-web.sh
激活我们的exec-server
- 启动webServer之后进程失败消失,可通过安装包根目录下对应启动日志进行排查
- 因此需要手动激活 executor
cd /opt/lagou/servers/azkaban/azkaban-exec-server
- linux121上执行:
curl -G "linux121:$(<./executor.port)/executor?action=activate" && echo
- linux123上执行:
curl -G "linux123:$(<./executor.port)/executor?action=activate" && echo
- 启动webServer之后进程失败消失,可通过安装包根目录下对应启动日志进行排查
访问地址
- https://linux122:8443
- 用户名和密码均为:azkaban
- https://linux122:8443
四、使用方法
① shell command 调度
同https://www.yuque.com/catdog/hadoop/pedntq#qmbUr
② job 依赖调度
③ HDFS 任务调度
注:command后面的 命令 最好用绝对路径
④ MAPREDUCE 任务调度
遇到虚拟机内存不足情况【查看内存命令:free -m
】:
- 增大机器内存
- 使用清除系统缓存命令,暂时释放一些内存【L1、L2、L3级缓存】
[root@linux123 mapreduce]# echo 1 >/proc/sys/vm/drop_caches
[root@linux123 mapreduce]# echo 2 >/proc/sys/vm/drop_caches
[root@linux123 mapreduce]# echo 3 >/proc/sys/vm/drop_caches
⑤ HIVE 脚本任务调度
⑥ 定时任务调度
- 网上搜索 cron表达式