目录

  • 一、Azkaban概论
    • 1.1 为什么需要工作流调度系统
    • 1.2 常见工作流调度系统
    • 1.3 Azkaban 与 Oozie 对比
  • 二、Azkaban集群安装
    • 2.1 集群模式安装
      • 2.1.1 安装包准备
      • 2.1.2 配置 MySQL
      • 2.1.3 配置 Executor Server
      • 2.1.4 配置 Web Server
    • 2.2 Work Flow 案例
      • 2.2.1 HelloWorld
      • 2.2.2 作业依赖案例
      • 2.2.3 自动失败重试案例
      • 2.2.4 手动失败重试案例
  • 三、Azkaban进阶
    • 3.1 JavaProcess 作业类型案例
    • 3.2 条件工作流案例
      • 3.2.1 运行时参数案例
      • 3.2.2 预定义宏案例
    • 3.3 定时执行案例
    • 3.4 邮件报警案例
      • 3.4.1 登录邮箱开启SMTP
      • 3.4.2 默认邮件报警案例
    • 3.5 电话报警案例
      • 3.5.1 第三方告警平台集成
      • 3.5.2 Azkaban多Executor模式注意事项

一、Azkaban概论

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

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

1.2 常见工作流调度系统

  1. 简单的任务调度:直接使用 Linux 的 Crontab 来定义;
    注⚠️:Crontab不能处理具有依赖关系的任务调度!
  2. 复杂的任务调度:开发调度平台或使用现成的开源调度系统,比如 Ooize、Azkaban、 Airflow、DolphinScheduler 等。

1.3 Azkaban 与 Oozie 对比

Ooize 相比 Azkaban 是一个重量级的任务调度系统,功能全面,但配置使用
也更复杂。如果可以不在意某些功能的缺失,轻量级调度器 Azkaban 是很不错的候选对象。

二、Azkaban集群安装

2.1 集群模式安装

2.1.1 安装包准备

  1. 将 azkaban-db-3.84.4.tar.gz,azkaban-exec-server-3.84.4.tar.gz,azkaban-web-server-3.84.4.tar.gz 上传到 hadoop102 的/opt/software 路径;

  2. 新建/opt/module/azkaban 目录,并将所有 tar 包解压到这个目录下:

[xiaobai@hadoop102 azkaban]$ mkdir /opt /module/azkaban
[xiaobai@hadoop102 azkaban]$ tar -zxvf azkaban-web-server-3.84.4.tar.gz -C /opt/module/azkaban/
[xiaobai@hadoop102 azkaban]$ tar -zxvf azkaban-exec-server-3.84.4.tar.gz -C /opt/module/azkaban/
[xiaobai@hadoop102 azkaban]$ tar -zxvf azkaban-db-3.84.4.tar.gz -C /opt/module/azkaban/
  1. 进入/opt/module/azkaban 目录,修改名称:
[xiaobai@hadoop102 azkaban]$ mv azkaban-web-server-3.84.4/ azkaban-web
[xiaobai@hadoop102 azkaban]$ mv azkaban-exec-server-3.84.4/ azkaban-exec
[xiaobai@hadoop102 azkaban]$ ll
total 4
drwxr-xr-x. 2 xiaobai xiaobai 4096 Apr 18  2020 azkaban-db-3.84.4
drwxr-xr-x. 6 xiaobai xiaobai   55 Apr 18  2020 azkaban-exec
drwxr-xr-x. 6 xiaobai xiaobai   51 Apr 18  2020 azkaban-web

2.1.2 配置 MySQL

  1. 启动MySQL:
[xiaobai@hadoop102 azkaban]$ mysql -uroot -p******
  1. 登陆 MySQL,创建 Azkaban 数据库:
mysql> create database azkaban;
Query OK, 1 row affected (0.19 sec)
  1. 创建 azkaban 用户并赋予权限 设置密码有效长度 4 位及以上
mysql> set global validate_password_length=4;
Query OK, 0 rows affected (0.07 sec)
  1. 设置密码策略最低级别(ps: 仅测试使用!)
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
  1. 创建 Azkaban 用户,任何主机都可以访问 Azkaban, 密码******:
mysql> CREATE USER 'azkaban'@'%' IDENTIFIED BY '******';
Query OK, 0 rows affected (0.17 sec)

赋予 Azkaban 用户增删改查权限:

mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.03 sec)
  1. 创建 Azkaban 表,完成后退出 MySQL:
mysql> use azkaban;
Database changed
mysql> source /opt/module/azkaban/azkaban-db-3.84.4/create-all-sql-3.84.4.sql;
mysql> show tables;
+-----------------------------+
| Tables_in_azkaban           |
+-----------------------------+
| QRTZ_BLOB_TRIGGERS          |
| QRTZ_CALENDARS              |
| QRTZ_CRON_TRIGGERS          |
| QRTZ_FIRED_TRIGGERS         |
| QRTZ_JOB_DETAILS            |
| QRTZ_LOCKS                  |
| QRTZ_PAUSED_TRIGGER_GRPS    |
| QRTZ_SCHEDULER_STATE        |
| QRTZ_SIMPLE_TRIGGERS        |
| QRTZ_SIMPROP_TRIGGERS       |
| QRTZ_TRIGGERS               |
| active_executing_flows      |
| active_sla                  |
| execution_dependencies      |
| execution_flows             |
| execution_jobs              |
| execution_logs              |
| executor_events             |
| executors                   |
| project_events              |
| project_files               |
| project_flow_files          |
| project_flows               |
| project_permissions         |
| project_properties          |
| project_versions            |
| projects                    |
| properties                  |
| ramp                        |
| ramp_dependency             |
| ramp_exceptional_flow_items |
| ramp_exceptional_job_items  |
| ramp_items                  |
| triggers                    |
| validated_dependencies      |
+-----------------------------+
35 rows in set (0.01 sec)
mysql> quit;
Bye

所需脚本为create-all-sql-3.84.4.sql,如图:

  1. 更改 MySQL 包大小;防止 Azkaban 连接 MySQL 阻塞:
[xiaobai@hadoop102 azkaban]$ sudo vim /etc/my.cnf
max_allowed_packet=1024M

注⚠️: 要放在在[mysqld]下面哦!

  1. 重启 MySQL:
[xiaobai@hadoop102 azkaban]$ sudo systemctl restart mysqld

2.1.3 配置 Executor Server

Azkaban Executor Server 处理工作流和作业的实际执行。

  1. 在/opt/module/azkaban/azkaban-exec/conf目录下编辑 azkaban.properties:
[xiaobai@hadoop102 conf]$ vim azkaban.properties default.timezone.id=Asia/Shanghai

  1. 同步分发 azkaban-exec:
[xiaobai@hadoop102 conf]$ xsync /opt/module/azkaban/azkaban-exec/
  1. 需进入/opt/module/azkaban/azkaban-exec 路径,分别在三台机器上,启动 executor server
[xiaobai@hadoop102 azkaban-exec]$ bin/start-exec.sh
[xiaobai@hadoop103 azkaban-exec]$ bin/start-exec.sh
[xiaobai@hadoop104 azkaban-exec]$ bin/start-exec.sh

停止命令:

[xiaobai@hadoop102 azkaban-exec]$ bin/shutdown-exec.sh

注⚠️:
若在/opt/module/azkaban/azkaban-exec 目录下出现 executor.port 文件:
或在azkaban数据库中的executors表中出现我们所连接的主机名称及端口号,则说明启动成功!

  1. 激活 executor,如下status显示success,则说明激活成功!
[xiaobai@hadoop102 azkaban-exec]$ curl -G "hadoop102:12321/executor?action=activate" && echo
{"status":"success"}
[xiaobai@hadoop103 azkaban-exec]$ curl -G "hadoop102:12321/executor?action=activate" && echo
{"status":"success"}
[xiaobai@hadoop104 azkaban-exec]$ curl -G "hadoop102:12321/executor?action=activate" && echo
{"status":"success"}

如图,激活成功后active栏显示为1!

2.1.4 配置 Web Server

Azkaban Web Server 处理项目管理,身份验证,计划和执行触发。

  1. /opt/module/azkaban/azkaban-web/conf目录下编辑 azkaban.properties
[xiaobai@hadoop102 conf]$ vim azkaban.properties

修改如下属性:

tips:
StaticRemainingFlowSize:正在排队的任务数;
CpuStatus:CPU占用情况:
MinimumFreeMemory:内存占用情况。

  1. 修改 azkaban-users.xml 文件,添加用户xiaobai
[xiaobai@hadoop102 conf]$ vim azkaban-users.xml <user password="******" roles="admin" username="xiaobai"/>

  1. 需进入到 hadoop102 的/opt/module/azkaban/azkaban-web 路径,启动 web server:
[xiaobai@hadoop102 azkaban-web]$ bin/start-web.sh

停止命令:

[xiaobai@hadoop102 azkaban-web]$ bin/shutdown-web.sh
  1. 访问 http://hadoop102:8081,并用 xiaobai用户登录:

2.2 Work Flow 案例

2.2.1 HelloWorld

  1. 创建command.job文件:
jane@janedeMacBook-Pro Desktop % vim command.job
#command.job
type=command
command=echo 'hello world'

压缩command.job,在WebServer新建项目,点击Create Project==>Upload==>command.job⬇️
点击Execute Flow⬇️

点击Execute ⬇️

Continue⬇️

工作单元日志在Job List⬇️

2.2.2 作业依赖案例

需求:
job A和job B执行完之后才能执行jobC。

实现:

  1. 新建first.project 文件,编辑内容如下:
azkaban-flow-version: 2.0

注⚠️: 该文件作用,是采用新的 Flow-API 方式解析 flow 文件。

  1. 新建 first.flow 文件,内容如下
nodes:- name: jobAtype: commandconfig:command: echo "hello world A"- name: jobBtype: commandconfig:command: echo "hello world B"- name: jobCtype: command#jobC依赖于jobA和jobBdependsOn:- jobA- jobBconfig:command: echo "hello world C"

注⚠️:
dependsOn与name/type对齐 是数组类型!

1). Name: job 名称;
2). Type: job 类型;command 表示要执行作业的方式为命令;
3). Config: job 配置。

将文件压缩上传至Azkaban Web Client,点击Execute flow,可以看到jobA / joB / jobC之间的依赖关系:

查看job list:

2.2.3 自动失败重试案例

需求:
如果执行任务失败,需要重试 3 次,重试的时间间隔 10000ms。

实现:
编译配置流: autoretry.flow:

nodes:- name: jobAtype: commandconfig:command: sh /not_exists.shretries: 3retry.backoff: 5000

tips:
retries: 重试次数;
retry.backoff: 重试的时间间隔


注⚠️:
可在 Flow 全局配置中添加任务失败重试配置,此时重试配置会应用到所有 Job:

config:retries: 3retry.backoff: 10000
nodes:- name: JobAtype: commandconfig:command: sh /not_exists.sh

2.2.4 手动失败重试案例

需求:
JobA=》JobB(依赖于 A)=》JobC=》JobD=》JobE=》JobF。生产环境,任何 Job 都 有可能挂掉,可以根据需求执行想要执行的 Job。

实现:
编译配置流handsretry.flow

nodes:- name: JobAtype: commandconfig:command: echo "This is JobA."- name: JobBtype: commanddependsOn:- JobAconfig:command: echo "This is JobB."- name: JobCtype: commanddependsOn:- JobBconfig:command: echo "This is JobC."- name: JobDtype: commanddependsOn:- JobCconfig:command: echo "This is JobD."- name: JobEtype: commanddependsOn:- JobDconfig:command: echo "This is JobE."- name: JobFtype: commanddependsOn:- JobEconfig:command: echo "This is JobF."

jobA-jobF执行图:

若是有失败的job,可在history==>flow里进行查看
之后点击prepare execution可接着从失败的job开始执行:

或在excute flow中手动将已经成功的job设为disable / children,再继续点击execute!

tips:
Enable 和 Disable 下面都分别有如下参数:
Parents: 该作业的上一个任务;
Ancestors: 该作业前的所有任务;
Children: 该作业后的一个任务;
Descendents: 该作业后的所有任务;
Enable All: 所有的任务。

三、Azkaban进阶

3.1 JavaProcess 作业类型案例

JavaProcess 类型可以运行一个自定义主类方法,type 类型为 javaprocess,可用的配置为:
Xms:最小堆;
Xmx:最大堆;
classpath:类路径;
java.class:要运行的 Java 对象,其中必须包含 Main 方法 main.args:main 方法的参数。

大数据之Azkaban部署相关推荐

  1. 027 大数据之Azkaban调度系统

    1.Azkaban 3.0 中文文档 大数据平台 -- 调度系统之Azkaban azkaban-web和azkaban-exec的一键启动和关闭(shell脚本) 解决 Azkaban Execut ...

  2. 遵化市10余个局委办一把手调研九次方大数据,详细部署数字遵化建设

    7月20日,遵化市人民政府市长董学忠.副市长王洪军率领市政府办.农业农村局.自然资源与规划局.交通运输局.商务和投资促进局.文化广电与旅游局.金融办.国资办.城投公司等10余个局.委.办一把手到九次方 ...

  3. 大数据平台安装部署(适用虚拟机级真实服务器,亲测)

    大数据集群搭建 一.基础环境准备 (虚拟环境or服务器环境) 1. 虚拟环境准备(服务器安装跳过此步骤) 1.1 安装vmware 注意:安装centos8系统及以上需要高版本vmware,实测vmw ...

  4. 大数据hadoop环境部署

    大数据hadoop在linux环境下的部署安装,包括单节点模式.伪分布模式以及完全分布式模式

  5. 大数据分布式存储的部署模式:分离式or超融合

    数据中心内部系统的核心要求是"稳定可靠",一是指系统在运行过程中有能力提供连续可靠的服务,长时间无故障运行:二是指当故障发生之后,有能力快速定位,及时排查,故障范围不蔓延. 分离式 ...

  6. 大数据之HBase部署

    一.HBase简介 1.1 HBase定义 HBase是一种分布式.可扩展.支持海量数据存储的NoSQL数据库. 1.2 HBase数据模型 逻辑上,HBase 的数据模型同关系型数据库很类似,数据存 ...

  7. 【大数据】Azkaban 看这一篇就够了!任务调度平台的搭建,使用,以及API开发

    目录大纲 0 写在前面的话 1.1 初识Azkaban 1.2 为什么需要任务调度器 1.3 常见几种任务调度器 1.4 Azkaban和Hadoop的关系 1.5 Azkaban 底层原理 2 Az ...

  8. 大数据练习环境部署(3) - Hadoop集群部署

    目录 1. 环境配置 1.1 创建hadoop用户 1.2 修改相关host 1.3 ssh免密登陆 2. JAVA安装 2.1 下载JDK1.8 2.2 解压安装java 2.3 分发到其他节点 2 ...

  9. 大数据Flink安装部署

    目录 1 Local本地模式 1.1 原理 1.2 操作 1.3 测试 2 Standalone独立集群模式 2.1 原理 2.2 操作 2.3 测试 3 Standalone-HA高可用集群模式 3 ...

最新文章

  1. java类型精度排序,Java中BigDecimal精度和相等比较的坑
  2. git 基于发布分支的开发
  3. 【Flutter】Future 与 FutureBuilder 异步编程代码示例 ( FutureBuilder 构造函数设置 | 处理 Flutter 中文乱码 | 完整代码示例 )
  4. 原码、补码、反码、1的补码
  5. 全面解读php-面向对象
  6. JavaFX自定义控件– Nest Thermostat第2部分
  7. iOS: 图解Xcode常用的快捷键
  8. 添加lua_C++/Lua高级交互
  9. python十大必备知识_学Python必备的基础知识
  10. 二叉树中是否存在节点和为指定值的路径
  11. Oracle 9i的标量数据类型
  12. 毕设题目:Matlab车辆计数
  13. 计算机ppt操作知识,计算机基础知识:PPT常用操作(一)
  14. 计算机截屏无法保存,win7电脑自带截图软件保存图片失败怎么办?
  15. mysql数据库加载太慢_MySQL数据库导致网站打开速度慢的解决思路
  16. webSocket实现聊天室功能
  17. Clickhouse 时间日期函数实战总结
  18. echarts 2.0 macarons主题安装
  19. php怎么改字体大小,phpstorm修改字体和大小
  20. go语言实现发送邮件带附件

热门文章

  1. 计算机网络之网络层:4、ARP协议
  2. linux 可执行文件去除绝对路径
  3. 设计模式:简单工厂模式(C++)【看不懂算我输】
  4. spring(四):spring与mybatis结合
  5. shell分析日志常用指令合集
  6. Poj_1325 Machine Schedule -最大匹配性质题目
  7. 面向对象第八天---预处理与mysql事务
  8. SQL 关于apply的两种形式cross apply 和 outer apply(转)
  9. Beatiful Soup获取淘宝商品详情
  10. 从头学习MVC4基础之视图