大数据Azkaban常见工作流进阶实战


1.Java案例工作流

1)新建一个 azkaban 的 maven 工程
2)创建包名:com.atguigu
3)创建 AzTest 类

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: com.atguigu.AzTest

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

6)将 Jar 包、flow 文件和 project 文件打包成 javatest.zip
7)创建项目=》上传 javatest.zip =》执行作业=》观察结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2 条件工作流案例

条件工作流功能允许用户自定义执行条件来决定是否运行某些Job。条件可以由当前Job的父 Job 输出的运行时参数构成,也可以使用预定义宏。在这些条件下,用户可以在确定 Job执行逻辑时获得更大的灵活性,例如,只要父 Job 之一成功,就可以运行当前 Job。

2.1 运行时参数 案例

2.2.1 基本原理

(1)父 Job 将参数写入 JOB_OUTPUT_PROP_FILE 环境变量所指向的文件
(2)子 Job 使用 ${jobName:param}来获取父 Job 输出的参数并定义执行条件

2.2.2 支持的条件运算符

(1)== 等于
(2)!= 不等于
(3)> 大于
(4)>= 大于等于
(5)< 小于
(6)<= 小于等于
(7)&& 与
(8)|| 或
(9)! 非

2.2.3 案例

需求:
JobA 执行一个 shell 脚本。
JobB 执行一个 shell 脚本,但 JobB 不需要每天都执行,而只需要每个周一执行。
(1)新建 JobA.sh

#!/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 会根据当日日期决定是否执行。在这里插入图片描述

3 预定义宏案例

Azkaban 中预置了几个特殊的判断条件,称为预定义宏。
预定义宏会根据所有父 Job 的完成情况进行判断,再决定是否执行。可用的预定义宏如
下:
(1)all_success: 表示父 Job 全部成功才执行(默认)
(2)all_done:表示父 Job 全部完成才执行
(3)all_failed:表示父 Job 全部失败才执行
(4)one_success:表示父 Job 至少一个成功才执行
(5)one_failed:表示父 Job 至少一个失败才执行
1)案例
需求:
JobA 执行一个 shell 脚本
JobB 执行一个 shell 脚本
JobC 执行一个 shell 脚本,要求 JobA、JobB 中有一个成功即可执行
(1)新建 JobA.sh

#!/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: JobC
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 文件=》执行作业=》观察结果
在这里插入图片描述

4 定时执行案例

需求:JobA 每间隔 1 分钟执行一次;
具体步骤:
1)Azkaban 可以定时执行工作流。在执行工作流时候,选择左下角 Schedule在这里插入图片描述
2)右上角注意时区是上海,然后在左面填写具体执行事件,填写的方法和 crontab 配置定时
任务规则一致。
在这里插入图片描述
在这里插入图片描述
3)观察结果
在这里插入图片描述
在这里插入图片描述
4)删除定时调度
点击 remove Schedule 即可删除当前任务的调度规则
在这里插入图片描述

posted @ 2021-11-24 21:45  赵广陆  阅读(105)  评论(0编辑  收藏  举报