Azkaban
1 Azkaban定义
一个完整的大数据项目,它是由许多不同的任务单元组成;
比如:shell脚本,mapreduce程序,hive脚本,spark程序等
哪些单元先做,哪些单元后做,需要由既定的流程,这个流程的指定就靠Azkaban这样的工作流调度工具来完成。
2 常见的工作流工具
crontab\oozie\azkaban\airflow等

- MySQL:Azkaban使用MySQL来存储项目和执行
- Azkaban Web服务器:Azkaban使用Jetty作为Web服务器,用作控制器以及提供Web页面
- Azkaban执行服务器:Azkaban执行服务器执行提交工作流
特点:
- 兼容任何版本的Hadoop
- 非常容易使用的web ui
- 模块化和插件化的功能
- 成功和失败都可以做警报
- SLA警告之后可以自动杀死任务
- 失败的作业可以自动重试
4 安装部署Azkaban
##1. 解压
[root@hadoop scripts]# mkdir /opt/apps/azkaban
[root@hadoop software]# tar -zxvf azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz -C /opt/apps/azkaban/
[root@hadoop opt]# cd /opt/apps/azkaban/
[root@hadoop azkaban]# mv azkaban-solo-server-0.1.0-SNAPSHOT/ soloserver
[root@hadoop azkaban]# cd soloserver/
##2. 配置
[root@hadoop soloserver]# vi conf/azkaban-users.xml
<user password="admin" roles="metrics,admin" username="admin"/>
##3. 启动azkaban的soloserver
##3.1 你如果配置环境变量直接启动azkaban不好使
[root@hadoop soloserver]# bin/start-solo.sh ## 必须在这个目录下启动
##3.2 通过webui
192.168.130.111:8081
5 Azakban实例
5.1 有向无环图进程

5.2 执行节点脚本
5.2.1 drop_tmp_table.sh
#!/bin/bash
## filename:drop_tmp_table.sh
## author : zxy
## date : 2021-07-28
## desc : 删除临时表
## 建表语句
DROP_TABLE_SQL="drop table if exists dwb_news.user_base_info_tmp;"
## 执行建表语句
beeline -i ~/.hiverc -n root -u jdbc:hive2://hadoop:10000 -e "${DROP_TABLE_SQL}"
5.2.2 histdata_to_temp.sh
#!/bin/bash
## filename:histdata_to_temp.sh
## author : zxy
## date : 2021-07-28
## desc : 将之前的数据先导入到创建的临时表
## 设置时间
exec_date=$1
## 建表语句
MV_TABLE_SQL="create table dwb_news.user_base_info_tmp as with t1 as ( select distinct_id as uid,model,manufacturer,os,ctime,row_number() over(partition by distinct_id order by ctime desc) as rank from ods_news.event_ro where logday = '${exec_date}'),t2 as (select * from t1 where rank = 1),t3 as (select * from dwb_news.user_base_info union all select * from t2),t4 as (select uid,model,manufacturer,os,ctime,row_number() over(partition by uid order by ctime desc) as rank from t3) select * from t4 where rank = 1;"
beeline -i ~/.hiverc -n root -u jdbc:hive2://hadoop:10000 -e "${MV_TABLE_SQL}"
5.2.3 drop_histdata_table.sh
#!/bin/bash
## filename:drop_histdata_table.sh
## author : zxy
## date : 2021-07-28
## desc : 删除原始表
## 建表语句
DROP_TABLE_SQL="drop table if exists dwb_news.user_base_info;"
beeline -i ~/.hiverc -n root -u jdbc:hive2://hadoop:10000 -e "${DROP_TABLE_SQL}"
5.2.4 rename_temp_table.sh
#!/bin/bash
## filename:rename_temp_table.sh
## author : zxy
## date : 2021-07-28
## desc : 更新临时表的名称
## 建表语句
RENAME_TABLE_SQL="alter table dwb_news.user_base_info_tmp rename to dwb_news.user_base_info;"
beeline -i ~/.hiverc -n root -u jdbc:hive2://hadoop:10000 -e "${RENAME_TABLE_SQL}"
5.3 Azkaban调程序
#filename:dwb_news.flow
#desc:建立dwb层相关的数据
config:
param.script_path_prefix: /opt/apps/scripts/azkaban
param.exec_date: ${exec_date}
nodes:
# 开始节点声明
- name: START
type: noop
# 删除临时表
- name: DROP_TMP_TABLE
type: command
dependsOn:
- START
config:
command: sh ${param.script_path_prefix}/drop_tmp_table.sh
# 将之前的数据先导入到创建的临时表
- name: HISTDATA_TO_TEMP
type: command
dependsOn:
- DROP_TMP_TABLE
config:
command: sh ${param.script_path_prefix}/histdata_to_temp.sh ${param.exec_date}
# 删除原始表
- name: DROP_HISTDATA_TABLE
type: command
dependsOn:
- HISTDATA_TO_TEMP
config:
command: sh ${param.script_path_prefix}/drop_histdata_table.sh
# 更新临时表的名称
- name: RENAME_TEMP_TABLE
type: command
dependsOn:
- DROP_HISTDATA_TABLE
config:
command: sh ${param.script_path_prefix}/rename_temp_table.sh
# 结束节点的声明
- name: END
type: noop
dependsOn:
- RENAME_TEMP_TABLE
tips:
这里需要注意的是,在删除临时表的时候,临时表应该已经存在
# filename:news.project
azkaban-flow-version: 2.0
tips:
dwb_news.flow和news.project打包成一个文件夹(new.zip)
5.4 Azkaban WebUI
5.4.1 登录


5.4.2 新建项目

5.4.3 上传文件(zip)

在上传文件的时候一直报如下的错误

经查看dwb_news.flow,发现如下代码中的nodes没有顶格写,修改后成功
## 修改前
nodes:
# 开始节点声明
- name: START
type: noop
## 修改后
nodes:
# 开始节点声明
- name: START
type: noop
5.4.4 上传成功

5.4.5 执行任务调度

5.4.6 添加参数

5.4.7 运行

5.4.8 定时启动(每天21:00执行一次)

 
|