Azkaban(三):进阶案例-java作业类型案例、条件工作流案例、定时执行案例

目录

Javaprocess作业类型案例

条件工作流案例

运行时参数案例

预定义宏案例

定时执行案例


Javaprocess作业类型案例

Javaprocess类型可以运行一个自定义主类方法,type类型为javaprocess。

1.创建maven工程,创建类名,创建AzkabanCase类。

package com.zj;

public class AzkabanCase {
    public static void main(String[] args) {
        System.out.println("this is case for azkaban!");
    }
}

2.打包(clear——>compile——>package)

 3.新建java.flow,内容如下:

nodes:
 - name: javatest
   type: javaprocess
   config:
    Xms: 90M
    Xmx: 200M
    java.class: com.zj.AzkabanCase

解释:

Xms:最小堆;

Xmx:最大堆;

classpath:类路径;

java.class:要运行的java对象;

main.args:main方法的参数;

4.将jar包、java.flow和azkaban.project文件打包成java.zip

5.web server操作

和以前的azkaban操作一样

Azkaban(一):入门-安装及案例_一个人的牛牛的博客-CSDN博客

Azkaban(二):基础案例集-依赖案例、自动重试案例、手动调节是否执行案例_一个人的牛牛的博客-CSDN博客

(1)新建项目;

(2)上传压缩包;

(3)执行作业;

(4)观察结果

条件工作流案例

 条件工作流功能允许用户自定义执行条件来决定是否执行某些job。

条件可以由当前的父job的输出参数构成,也可以使用预定义宏。在这些条件下,用户可以在确定执行逻辑时获得更大的灵活性。例如:只要父job执行成功就可以执行当前job。

运行时参数案例

基本原理

(1)父job将参数写入JOB_OUTPUT_PROP_FILE环境变量所指向的文件。

(2)子job使用${jobName:param}来获取父job输出的参数并定义执行条件。

支持的条件运算符

1== 等于

2!= 不等于

3> 大于

4>= 大于等于

5< 小于

6<= 小于等于

7&&

8||

9!

案例

需求: jobA执行一个shell脚本。 jobB执行一个shell脚本,但jobB不需要每天都执行,只需要每个周二执行。

1.创建编写jobA.sh

#!/bin/bash
echo "this is jobA,done JobA!!!"
wk=`date +%w`
echo "{\"wk\":$wk}" > $JOB_OUTPUT_PROP_FILE

解释:

date +%w:输出星期为数字,星期一--星期六为1--6,星期日为0;

"{\"wk\":$wk}":json类型,json基本格式为"{"key":value}",\"为转义字符;

2.创建编写jobB.sh

#!/bin/bash
echo "this is jobB,done 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} == 2

4.将jobA.sh、jobB.sh、condition.flow和azkaban.project文件以zip格式压缩打包

5.web server操作

和前面流程一样

创建项目——上传压缩包——执行作业——观察结果

结果:

 完成!!!!

预定义宏案例

Azkaban中预置了几个特殊的判断条件,称为预定义宏。

预定义宏会根据所有父job的完成情况进行判断,再决定是否执行。可用的预定义宏如下:

1all_success:表示父job全部成功才执行(默认);

2all_done:表示父job全部完成才执行;

3all_failed:表示父job全部失败才执行;

4one_success:表示父job至少一个成功才执行

5one_failed:表示父job至少一个失败才执行;

案例

需求:

jobA和jobB分别执行一个shell脚本

jobC执行一个shell脚本,要求jobA、jobB中有一个成功就可以执行;

1.创建并编写jobB.sh,jobC.sh,不编写jobA,使jobA执行失败

#!/bin/bash
echo "this is jobB,done jobB!!!"
#!/bin/bash
echo "hello,hello!this is jobC,done JobC!!!"

2.创建并编写predefine.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

3.将predefine.flow、jobB.sh、jobC.sh和azkaban.project以zip压缩格式打包

4.web server操作

和前面流程一样

创建项目——上传压缩包——执行文件——观察结果

结果:

完成!!!!! 

定时执行案例

需求:jobA每隔一分钟执行一次。

1.新建azkaban.project文件(文件名不重要,后缀一定要是project·),内容如下:

azkaban-flow-version: 2.0

注:内容含义为采用flow-API(版本为2.0)方式解析flow文件。

2.新建first.flow文件(文件名不重要,后缀一定要是flow),内容如下:

nodes:
 - name: jobA
   type: command
   config:
     command: echo "Hello World"

3.将azkaban.project和first.flow压缩,以zip格式压缩,文件名一定要是英文

4.浏览器进入web server操作

流程和前面一样

Azkaban(一):入门-安装及案例_一个人的牛牛的博客-CSDN博客

Azkaban(二):基础案例集-依赖案例、自动重试案例、手动调节是否执行案例_一个人的牛牛的博客-CSDN博客

Azkaban(三):进阶案例-java作业类型案例、条件工作流案例_一个人的牛牛的博客-CSDN博客

创建项目——上传压缩的文件——设置执行任务——观察结果

(1)设置定时执行,在执行工作流时候,选择左下角Schedule

 (2)填写具体执行设置

(3)观察结果

 (4)删除定时调度

 完成!!!!

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值