- 一 、Azkaban 进阶
- 1、JavaProcess 作业类型案例
- 1)新建一个 azkaban 的 maven 工程
- 2)创建包名:com.atguigu
- 3)创建 AzTest 类
- 4)打包成 jar 包 azkaban-1.0-SNAPSHOT.jar
- 5)新建 testJava.flow,内容如下
- 6)将 Jar 包、flow 文件和 project 文件打包成 javatest.zip
- 7)创建项目=》上传 javatest.zip =》执行作业=》观察结果
- 二、 条件工作流案例
- 2.1 运行时参数案例
- 1)基本原理
- 2)支持的条件运算符:
- 3)案例:
- (1)新建 JobA.sh
- (2)新建 JobB.sh
- (3)新建 condition.flow
- (4)将 JobA.sh、JobB.sh、condition.flow 和 azkaban.project 打包成 condition.zip
- (5)创建 condition 项目=》上传 condition.zip 文件=》执行作业=》观察结果
- (6)按照我们设定的条件,JobB 会根据当日日期决定是否执行。
- 2.2 预定义宏案例
- 1)案例
- (1)新建 JobA.sh
- (2)新建 JobC.sh
- (3)新建 macro.flow
- (4)JobA.sh、JobC.sh、macro.flow、azkaban.project 文件,打包成 macro.zip。
- (5)创建 macro 项目=》上传 macro.zip 文件=》执行作业=》观察结果
- 2.3 定时执行案例
- 1)Azkaban 可以定时执行工作流。在执行工作流时候,选择左下角 Schedule
- 2)右上角注意时区是上海,然后在左面填写具体执行事件,填写的方法和 crontab 配置定时任务规则一致。
- 3)观察结果
- 4)删除定时调度
- 三、报警案例
- 1 、邮箱报警
- 1)申请注册一个 163 邮箱
- 2)点击邮箱账号=》账号管理
- 3)开启 SMTP 服务
- 4)一定要记住授权码
- 2、 默认邮件报警案例
- 1 ) 在 azkaban-web 节 点 hadoop102 上 , 编 辑
- 2)保存并重启 web-server。
- 3)编辑 basic.flow
- 4)将 azkaban.project 和 basic.flow 压缩成 email.zip
- 5)创建工程=》上传文件=》执行作业=》查看结果
- 6)观察邮箱,发现执行成功或者失败的邮件
- 3、 电话报警案例
- 1、第三方告警平台集成
- 1)进入睿象云官网注册账号并登录
- 2)集成告警平台,使用 Email 集成
- 3)获取邮箱地址,后边需将报警信息发送至该邮箱
- 4)配置分派策略
- 5) 测试
- 四、Azkaban 多 Executor 模式注意事项
- 1)在 MySQL 中 azkaban 数据库 executors 表中,查询 hadoop102 上的 Executor 的 id。
- 2)在执行工作流程时加入 useExecutor 属性,如下
JavaProcess 类型可以运行一个自定义主类方法,type 类型为 javaprocess,可用的配置为: Xms:最小堆 Xmx:最大堆 classpath:类路径 java.class:要运行的 Java 对象,其中必须包含 Main 方法 main.args:main 方法的参数
案例:
1)新建一个 azkaban 的 maven 工程 2)创建包名:com.atguigu 3)创建 AzTest 类package com.atguigu; public class AzTest { public static void main(String[] args) { System.out.println("This is for testing!"); } }4)打包成 jar 包 azkaban-1.0-SNAPSHOT.jar 5)新建 testJava.flow,内容如下
nodes: - name: test_java type: javaprocess config: Xms: 96M Xmx: 200M java.class: org.example.TestJavaProcess6)将 Jar 包、flow 文件和 project 文件打包成 javatest.zip 7)创建项目=》上传 javatest.zip =》执行作业=》观察结果
2.1 运行时参数案例 1)基本原理条件工作流功能允许用户自定义执行条件来决定是否运行某些Job。条件可以由当前Job 的父 Job
输出的运行时参数构成,也可以使用预定义宏。在这些条件下,用户可以在确定 Job 执行逻辑时获得更大的灵活性,例如,只要父 Job
之一成功,就可以运行当前 Job。
(1)父 Job 将参数写入 JOB_OUTPUT_PROP_FILE 环境变量所指向的文件
(2)子 Job 使用 ${jobName:param}来获取父 Job 输出的参数并定义执行条件
(1)== 等于 (2)!= 不等于 (3)> 大于 (4)>= 大于等于 (5)< 小于 (6)<= 小于等于 (7)&& 与 (8)|| 或 (9)! 非3)案例:
需求:
JobA 执行一个 shell 脚本。
JobB 执行一个 shell 脚本,但 JobB 不需要每天都执行,而只需要每个周一执行。
#!/bin/bash echo "do JobA" wk=`date +%w` echo "{"wk":$wk}" > $JOB_OUTPUT_PROP_FILE(2)新建 JobB.sh
#!/bin/bash echo "do JobB"(3)新建 condition.flow
nodes: - name: JobA type: command config: command: sh JobA.sh - name: JobB type: command dependsOn: - JobA config: command: sh JobB.sh condition: ${JobA:wk} == 1(4)将 JobA.sh、JobB.sh、condition.flow 和 azkaban.project 打包成 condition.zip (5)创建 condition 项目=》上传 condition.zip 文件=》执行作业=》观察结果 (6)按照我们设定的条件,JobB 会根据当日日期决定是否执行。 2.2 预定义宏案例
1)案例Azkaban 中预置了几个特殊的判断条件,称为预定义宏。 预定义宏会根据所有父 Job
的完成情况进行判断,再决定是否执行。可用的预定义宏如 下:
(1)all_success: 表示父 Job 全部成功才执行(默认)
(2)all_done:表示父 Job 全部完成才执行
(3)all_failed:表示父 Job 全部失败才执行
(4)one_success:表示父 Job 至少一个成功才执行
(5)one_failed:表示父 Job 至少一个失败才执行
需求:
- JobA 执行一个 shell 脚本
- JobB 执行一个 shell 脚本
- JobC 执行一个 shell 脚本,要求 JobA、JobB 中有一个成功即可执行
#!/bin/bash echo "do JobA"(2)新建 JobC.sh
#!/bin/bash echo "do JobC"(3)新建 macro.flow
nodes: - name: JobA type: command config: command: sh JobA.sh - name: JobB type: command config: command: sh JobB.sh - name: JobCC type: command dependsOn: - JobA - JobB config: command: sh JobC.sh condition: one_success(4)JobA.sh、JobC.sh、macro.flow、azkaban.project 文件,打包成 macro.zip。
注意:没有 JobB.sh。
(5)创建 macro 项目=》上传 macro.zip 文件=》执行作业=》观察结果 2.3 定时执行案例需求:JobA 每间隔 1 分钟执行一次;
具体步骤:
点击 remove Schedule 即可删除当前任务的调度规则。
Azkaban 默认支持通过邮件对失败的任务进行报警,配置方法如下
1 ) 在 azkaban-web 节 点 hadoop102 上 , 编 辑vi /opt/module/azkaban/azkaban-web/conf/azkaban.properties,修改如下内容:
[atguigu@hadoop102 azkaban-web]$ vi /opt/module/azkaban/azkabanweb/conf/azkaban.properties
添加如下内容:
#这里设置邮件发送服务器,需要 申请邮箱,切开通 stmp 服务,以下只是例子 mail.sender=atguigu@126.com mail.host=smtp.126.com mail.user=atguigu@126.com mail.password=用邮箱的授权码2)保存并重启 web-server。
[atguigu@hadoop102 azkaban-web]$ bin/shutdown-web.sh [atguigu@hadoop102 azkaban-web]$ bin/start-web.sh3)编辑 basic.flow
nodes: - name: jobA type: command config: command: echo "This is an email test."4)将 azkaban.project 和 basic.flow 压缩成 email.zip 5)创建工程=》上传文件=》执行作业=》查看结果
1)进入睿象云官网注册账号并登录有时任务执行失败后邮件报警接收不及时,因此可能需要其他报警方式,比如电话报警。 如有类似需求,可与第三方告警平台进行集成,例如睿象云。
官网地址:https://www.aiops.com/
2)集成告警平台,使用 Email 集成
执行上一个邮件通知的案例,将通知对象改为刚刚集成第三方平台时获取的邮箱。
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 | hadoop103 | 35985 | 1 | | 2 | hadoop104 | 36363 | 1 | | 3 | hadoop102 | 12321 | 1 | +----+-----------+-------+--------+ 3 rows in set (0.00 sec)2)在执行工作流程时加入 useExecutor 属性,如下
指定id是3的集群
方案二:在 Executor 所在所有节点部署任务所需脚本和应用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)