工作流调度系统 Azkaban使用方法大全(二)

news2025/1/13 13:36:06

1 案例

1.1 Hello World

first.project

azkaban-flow-version: 2.0

first.flow

nodes:
  - name: jobA
    type: command
    config:
      command: echo "hi 大佬"

打包为zip,即可上传

name:job名称

type:job类型。command表示要执行作业的方式为命令。

config:job配置

1.2 作业依赖案例

需求:JobA和Job执行完了,才能执行 JobC

pojo.project

azkaban-flow-version: 2.0

pojo.flow

nodes:
  - name: jobC
    type: command
    # JobC 依赖于 JobA 和 JobB
    dependsOn:
      - jobA
      - jobB
    config:
      command: echo "hi 大佬"
  
  - name: jobA
    type: command
    config:
      command: echo "开始执行 jobA"
      
  - name: jobB
    type: command
    config:
      command: echo "开始执行 jobB"  

dependsOn: 作业依赖

image.png

1.3 自动失败重试

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

pojo.flow

nodes:
  - name: jobA
    type: command
    config:
      command: sh /usr/local/azkaban/test/test.sh
      retries: 3
      retry.backoff: 10000

retries: 重试次数

retry.backoff: 重试的时间间隔

1.4 手动失败重试

需求:JobA->jobF,一次依赖吗,在生产环境,任何job都有可能挂掉,可以根据需求执行想要执行的job。

pojo.flow

nodes:
  - name: jobA
    type: command
    config:
      command: echo "执行jobA"

  - name: jobB
    type: command
    dependsOn:
      - jobA
    config:
      command: echo "执行jobB"
 
  - name: jobC
    type: command
    dependsOn:
      - jobB
    config:
      command: echo "执行jobC"
      
  - name: jobD
    type: command
    dependsOn:
      - jobC
    config:
      command: echo "执行jobD"
 
  - name: jobE
    type: command
    dependsOn:
      - jobD
    config:
      command: echo "执行jobE"
      
  - name: jobF
    type: command
    dependsOn:
      - jobE
    config:
      command: echo "执行jobF"  

image20221222141909262.png

image20221222142301936.png

或者禁止

image20221222142450190.png

2 JavaProcess作业案例

JavaProcess类型可以运行一个自定义主类方法,type类型为javaprocess,可用配置为:

Xms: 最小堆
Xmx: 最大堆
classpath: 类路径
java.class: 要运行的java对象,必须包含Main方法
main.args: main方法的参数

案例:

1、新建一个azkaban的maven工程: azkaban_cs

2、创建包名:com.cs

3、创建 AzTest类

package com.cs;

public class AzTest {
    public static void main(String[] args) {
        System.out.println("java测试AzTest");
    }
}

4、然后打包: azkaban_cs-1.0-SNAPSHOT.jar

5、testJava.flow

nodes:
  - name: test_java
    type: javaprocess
    config:
      Xms: 96M
      Xmx: 200M
      java.class: com.cs.AzTest

3 条件工作流

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

3.1 运行时参数

1、运行原理

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

2、支持的运算符

==、!=、>、<、>=、<=、&& 与、

3、需求案例

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

image20221222163321137.png

jobA.sh

#!/bin/bash
echo "执行jobA"
wk=`date +%w`
echo "{\"wk\":$wk}" > $JOB_OUTPUT_PROP_FILE

jobB.sh

#!/bin/bash
echo "执行jobB"

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

3.2 预定义宏案例

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

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

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

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

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

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

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

需求:

  • jobA执行一个shell脚本
  • jobB执行一个shell脚本
  • jobC执行一个shell脚本,要求jobA、jobB中有一个成功即可执行。

image20221222163958102.png

jobA.sh

#!/bin/bash
echo "执行jobA"

jobB.sh

#!/bin/bash
echo "执行jobB"

jobC.sh

#!/bin/bash
echo "执行jobC"

marco.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 定时执行

image20221222165119880.png

image20221222165357235.png

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

使用方法同 cron,具体参考:https://www.couragesteak.com/article/189

5 报警

5.1 邮件

修改配置文件

cd /usr/local/azkaban/azkaban-web-server-3.84.4
vim conf/azkaban.properties
mail.sender=发件人邮箱
mail.host=SMTP服务器地址
mail.user=
mail.password=

重启 web server

cd /usr/local/azkaban/azkaban-web-server-3.84.4
bin/shutdown-web.sh
bin/start-web.sh

image.png

5.2 电话告警

通常邮件报警可能会不及时,因此需要电话来及时通知。可与第三方平台进行集成。

睿象云:https://www.aiops.com/

5 Azkaban 多 Executor 模式注意事项

Azkaban 多 Executor模式指:在集群中多个节点部署 Executor。在这种模式下, Azkaban web server会根据策略,选取其中一个 Executor 去执行任务。

为确保所选的 Executor 能够准确的执行任务,我们须在一下两种方案任选其一,推荐方案二。

方案一:在特定的 Executor 去执行任务

1、在 MySQL 中 azkaban 数据库 executors 表中,查询 Executor的id。

use azkaban;

select * from executors;

image.png

这是任务脚本,可以写为绝对路径。

方案二:在 Executor 所在所有节点部署任务所需的脚本和应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/435944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Java8实战》第7章 并行数据处理与性能

7.1 并行流 Stream 接口能非常方便地并行处理其元素&#xff1a;对收集源调用 parallelStream 方法就能将集合转换为并行流。并行流就是一个把内容拆分成多个数据块&#xff0c;用不同线程分别处理每个数据块的流。 public long sequentialSum(long n) { return Stream.itera…

跌倒检测和识别1:跌倒检测数据集(含下载链接)

跌倒检测和识别1&#xff1a;跌倒检测数据集(含下载链接) 目录 跌倒检测和识别1&#xff1a;跌倒检测数据集(含下载链接) 1. 前言 2. 跌倒姿态&#xff1a;站立-弯腰(蹲下)-躺下 3. 跌倒检测数据集&#xff1a; &#xff08;1&#xff09;Fall-Down-Det-v1 &#xff08;2…

k8s client-go 程序实现kubernetes Controller Operator 使用CRD 学习总结

k8s client-go 程序实现kubernetes Controller & Operator 使用CRD 学习总结 大纲 1 定义CRD2 client-go自动代码生成3 client-go操作CR4 创建镜像5 配置权限6 部署到k8s 基础流程 这里使用client-go实现编写&#xff0c;相对于kubebuiler这些工具生成脚手架工程要麻烦…

学习零碎-txt转json

import re import jsondef txtToJson():# 文件路径path "./prot.txt"# 读取文件with open(path, r, encoding"utf-8") as file:# 定义一个用于切割字符串的正则# seq re.compile(":")result []# 逐行读取for line in file:lst line.split(#)…

面试官:“你会组件化开发操作吗?它的优势在哪?”

随着 Android 版本的不断更新升级和用户对 APP 产品需求技术越来越高&#xff0c;相对的各大公司对 Android 开发者们设置的招聘门槛也越来越高。 至于如何去看一个开发者水平的高低&#xff0c;一般看面试官会怎么问&#xff0c;会问哪些部分的技术内容&#xff1f; 一般公司…

【AI前沿】chatgpt还有哪些不足?

博客昵称&#xff1a;吴NDIR 个人座右铭&#xff1a;得之淡然&#xff0c;失之坦然 作者简介&#xff1a;喜欢轻音乐、象棋&#xff0c;爱好算法、刷题 其他推荐内容&#xff1a;计算机导论速记思维导图 其他内容推荐&#xff1a;五种排序算法 在这个愉快的周末让我们聊一下Cha…

【C语言】文件的输入与输出

在此之前&#xff0c;我极少使用C语言处理文件。因为我认为使用Python、matlab处理文件是及其方便的。 事实果真如此吗&#xff1f; 文章目录 一、与文件进行通信1.1 文件的定义1.2 文本文件和二进制文件1.3 底层 I/O 和 标准I/O1.4 标准文件1.5 标准 I/O 二、文件的打开和关闭…

flume 的Channel的种类

目录 1、MemoryChannel 2、FileChannel 3、KafkaChannel Flume拦截器 消息队列传输消息 1、MemoryChannel 数据放在内存中,会在Flume宕机的时候丢失数据,可以⽤在对数据安全性要求没有那么⾼的场景中⽐如⽇志数据。 2、FileChannel 不会丢失数据,因为数据是放在磁盘上边的…

前端使用国密SM4进行加密

目录 需求【方法1】 - 使用 sm4util 依赖【方法2】sm4.js引入1. /public/sm4.js2. body 标签上引入该文件3. 使用 - ECB 模式加密 【方法3】1. 本地写 js 文件2. 使用 - ECB 模式加解密 需求 前端/后端使用 国密SM4 进行加密/解密&#xff0c; 【注意】前后端配合加解密时&…

【数据结构】线性表之——“顺序表”

文章目录 前言顺序表主体结构顺序表操作函数介绍顺序表操作函数实现实现顺序&#xff1a;顺序表的初始化&#xff1a;顺序表插入函数&#xff1a;头插尾插指定位置插入 顺序表打印函数查找顺序表数据顺序表删除函数头删尾删指定位置删除 修改顺序表销毁顺序表 文件分类test.cSe…

webpack5搭建react框架-生产环境配置

webpack5配置react基础生产环境 一、前言 在项目构建时不同的环境下会有不同配置&#xff0c;在前面文章中已经使用webpack5配置好了基础环境和开发环境&#xff0c;但是在生产环境时有些配置和开发环境是不需要的&#xff0c;有些是可以在优化的&#xff0c;所以下面继续生产…

分支和循环语句——1

老铁们&#xff0c;这是博主初识C之后的第一篇C语言学习博客&#xff0c;希望可以给你们带来帮助。 文章目录 一、什么是语句? 二、分支语句 1、if语句 2、switch语句 三、while循环 一、什么是语句? C语句可分为以下五类&#xff1a; 1. 表达式语句 2. 函数调用语句…

模拟不同MIMO-OFDM方案的MATLAB代码(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果​ &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 MIMO技术指在发射端和接收端分别使用多个发射天线和接收天线&#xff0c;使信号通过发射端与接收端的多个天线传送和接收&…

杭州旭航集团,申请纳斯达克IPO上市,募资9800万美元

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;为中国企业提供数字内容营销服务的杭州旭航网络科技有限公司的控股公司Xuhang Holdings Ltd(以下简称&#xff1a;旭航集团)&#xff0c;近期已向美国证券交易委员会&#xff08;SEC&#xff09;提…

随想录Day53--动态规划: 1143.最长公共子序列 ,1035.不相交的线 , 53. 最大子序和

1143.最长公共子序列,这题要画一个二维数组&#xff0c;用两层for循环来遍历每个字符&#xff0c;从而比较是否相等。用dp[i][j]来表示当遍历到text2的第i个字符和text1的第j个字符时&#xff0c;最长的公共子序列为多少。比如说两个字符串&#xff08;“abcde”和“ace”&…

怎么样成为一名Python工程师?到底要会哪些东西?你会了多少?

目录 重点&#xff1a;爬虫部分项目、源码展示python数据分析可视化大屏看板python爬虫爬取淘宝卤鸭货商品数据python游戏开发python自动化办公 重点&#xff1a; 1、做一名程序员&#xff0c;绝对要耐得住寂寞&#xff0c;并且要一直有点兴趣促进你学习。如果你完全没兴趣&am…

electron+vue3全家桶+vite项目搭建【十】vite路径取别名、多环境相关配置

文章目录 引入1.路径取别名配置2.测试别名配置3.环境变量配置4.验证环境变量配置 引入 我们之前写代码的时候用相对路径不是很方便&#xff0c;并且所有环境共用同一套配置也不太好&#xff0c;接下来我们通过vite配置一下路径别名和环境变量 视频讲解 vite官网 demo项目地址…

DIN论文翻译

摘要 在电子商务行业&#xff0c;利用丰富的历史行为数据更好地提取用户兴趣对于构建在线广告系统的点击率(CTR)预测模型至关重要。关于用户行为数据有两个关键观察结果&#xff1a;i) 多样性(diversity)。用户在访问电子商务网站时对不同种类的商品感兴趣。ii) 局部激活(local…

Linux驱动之GPIO函数、IO内存映射、混杂设备驱动

之前学习完了字符设备驱动的大体框架&#xff0c;现在我们就使用这个基本的框架来对硬件进行操作&#xff0c;例如通过指令控制led的状态&#xff0c;编写LED驱动。LED驱动有多种实现方式。 目录 GPIO函数 IO内存映射 混杂设备驱动 GPIO函数 首先加入需要的头文件。 #incl…

欧盟立法者签署公开信,近万人联名“暂停高级AI研发”

来源丨CoinTelegraph 编辑丨liuruiWeb3CN.Pro ChatGPT 曾经的势头有多猛烈如今就被行业大佬抵制的就有多严重。 近日&#xff0c;十几位欧盟 (EU) 政客签署了“暂停高级AI研发”的公开信&#xff0c;呼吁 AI &#xff08;人工智能&#xff09;的“安全”发展&#xff0c;特斯拉…