目录
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的完成情况进行判断,再决定是否执行。可用的预定义宏如下:
1)all_success:表示父job全部成功才执行(默认);
2)all_done:表示父job全部完成才执行;
3)all_failed:表示父job全部失败才执行;
4)one_success:表示父job至少一个成功才执行 ;
5)one_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)删除定时调度
完成!!!!