azkaban --- 案例实操

news2024/11/27 14:48:28

目录

案例一 : 输出Hello World

案例二 :作业依赖

案例三 :内嵌工作流

案例四 :自动失败

案例五 :手动失败

案例六 :JavaProcess 

案例七 :启动服务

案例八 :Hbase

案例九 :SQL

案例十 :条件工作流

运行时参数案例

预定义宏案例


安装azkaban教程 & 基本使用

案例一 : 输出Hello World

案例二 :作业依赖

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

azkaban.project文件

azkaban-flow-version: 2.0

修改two.flow为如下内容

nodes:
  - name: jobC
    type: command
    dependsOn:
      - jobA
      - jobB
    config:
      command: echo "I’m JobC"

  - name: jobA
    type: command
    config:
      command: echo "I’m JobA"

  - name: jobB
    type: command
    config:
      command: echo "I’m JobB"

将修改后的basic.flow和azkaban.project压缩成two.zip文件 

dependsOn: jobC 依赖 JobA和JobB

 

执行成功就是下面的这样

案例三 :内嵌工作流

需求:JobA执行完后执行JobB,JobA和JobB形成一个工作流embedded_flow;JobC依赖于embedded_flow该工作流。

修改three.flow为如下内容

nodes:
  - name: jobC
    type: command
    dependsOn:
      - embedded_flow
    config:
      command: echo "I’m JobC"

  - name: embedded_flow
    type: flow
    nodes:
      - name: jobB
        type: noop
        dependsOn:
          - jobA

      - name: jobA
        type: command
        config:
          command: pwd

将修改后的three.flow和azkaban.project压缩成three.zip文件 

参数说明:

type: 作业类型。flow表示,定义为工作流类型

type: noop 什么也不处理

工作流定义文件中可以添加子工作流

 

案例四 :自动失败

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

修改four.flow为如下内容

nodes:
  - name: JobA
    type: command
    config:
      command: sh four.sh
      retries: 3
      retry.backoff: 10000

将修改后的four.flow和azkaban.project压缩成four.zip文件 

 配置中没有four.sh这个文件

参数说明:

retries:重试次数

retry.backoff:重试的时间间隔

案例五 :手动失败

需求:JobA=>JobB(依赖于A)=>JobC=>JobD=>JobE=>JobF。

生产环境,任何Job都有可能挂掉,可以根据需求执行想要执行的Job。

修改five.flow为如下内容

nodes:
  - name: JobA
    type: command
    config:
      command: echo "This is JobA."

  - name: JobB
    type: command
    dependsOn:
      - JobA
    config:
      command: echo "This is JobB."

  - name: JobC
    type: command
    dependsOn:
      - JobB
    config:
      command: echo "This is JobC."

  - name: JobD
    type: command
    dependsOn:
      - JobC
    config:
      command: echo "This is JobD."

  - name: JobE
    type: command
    dependsOn:
      - JobD
    config:
      command: echo "This is JobE."

  - name: JobF
    type: command
    dependsOn:
      - JobE
    config:
      command: echo "This is JobF."

将修改后的five.flow和azkaban.project压缩成five.zip文件 

这个是一层依赖一层 

 

 按照道理应该是这样每一层都是成功的

 但是如果手动干掉一个节点,或者干掉下一个节点

 

 

 这样这个节点就不会运行

Enable和Disable下面都分别有如下参数:

​ Parents:该作业的上一个任务

​ Ancestors:该作业前的所有任务

​ Children:该作业后的一个任务

​ Descendents:该作业后的所有任务

​ Enable All:所有的任务

案例六 :JavaProcess 

创建一个java类

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

打包成jar包azkaban-1.0-SNAPSHOT.jar 

修改four.flow为如下内容

nodes:
  - name: test_java
    type: javaprocess
    config:
      Xms: 96M
      Xmx: 200M
      java.class: azkaban.AzkabanTest

将Jar包、flow文件和project文件打包成six.zip 

 

 

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

Xms:最小堆

Xmx:最大堆

java.class:要运行的Java对象,其中必须包含Main方法

案例七 :启动服务

修改seven.flow为如下内容

nodes: 
  - name: jobA
    type: command
    config: 
      command: sh jobshell.sh

新建jobshell.sh文件,内容如下: 

#!/bin/bash
echo "do jobA"
echo "azkaban jobA"
echo "azkaban shell sh"

start-all.sh
hdfs dfsadmin -safemode leavel

echo "over"

  将jobshell.sh、seven.flow和azkaban.project打包成seven.zip 

案例八 :Hbase

先启动hbase

修改eight.flow为如下内容

nodes:
  - name: jobhbase
    type: command
    config:
      command: hbase shell hbasedemo.sh

新建hbasedemo.sh文件,内容如下: 

#!/bin/bash

create_namespace 'test0516'

create 'test0516:tb1','family','student'

list_namespace

list_namespace_tables 'test0516' 

exit

 将hbasedemo.sh、eight.flow和azkaban.project打包成eight.zip 

案例九 :SQL

启动hive

修改nine.flow为如下内容

nodes: 
  - name: jobhive
    type: command
    config: 
      command: hive -f myhive.sql

 新建myhive.sql,内容如下:

create database if not exists test0516DB;

use test0516DB;

create table if not exists azinfo(id int,name string) row format delimited fields terminated by ',';

load data inpath '/opt/azkaban/info.txt' into table azinfo;

select *  from azinfo;

info.txt内容如下: 

1,java
2,sql
3,hadoop
4,scala
5,spark

  将myhive.sql、nine.flow和azkaban.project打包成nine.zip 

 

案例十 :条件工作流

条件工作流功能允许用户根据条件指定是否运行某些作业。条件由先前作业的运行时参数(例如输出)和预定义宏组成。在这些条件下,用户可以在确定作业执行逻辑时获得更大的灵活性。例如,只要父作业之一成功,他们就可以运行当前作业。他们可以在工作流内部实现分支逻辑。

运行时参数案例

运行时参数一般指作业的输出,使用时有以下几个条件:

(1)使用 ${jobName:param}来定义作业运行时参数的条件

(2)“:” 用于分隔jobName和参数

(3)job运行时,使用参数与条件中的字符串或数字进行比较

(4)用户需要事先将参数的值写入$JOB_OUTPUT_PROP_FILE

需求:

JobA执行一个shell脚本;

JobB条件依赖于JobA,当JobA中param1的值为“BBB”,执行JobB;

JobC也条件依赖于JobA,当JobA中param1的值为“CCC”,执行JobC

新建ten.flow,内容如下:

nodes:
 - name: JobA
   type: command
   config:
     command: sh parameter.sh

 - name: JobB
   type: command
   dependsOn:
     - JobA
   config:
     command: echo "This is JobB."
   condition: ${JobA:param1} == "BBB"

 - name: JobC
   type: command
   dependsOn:
     - JobA
   config:
     command: echo "This is JobC."
   condition: ${JobA:param1} == "CCC"

新建parameter.sh,内容为: 

echo '{"param1":"BBB"}' > $JOB_OUTPUT_PROP_FILE

将parameter.sh、ten.flow和azkaban.project打包成ten.zip 

 

支持的运算符:

(1)== 等于

(2)!= 不等于

(3)> 大于

(4)>= 大于等于

(5)< 小于

(6)<= 小于等于

(7)&& 与

(8)|| 或

(9)! 非

预定义宏案例

需求:

JobA执行一个shell脚本;

JobB条件依赖于JobA,当JobA中param1的值为“BBB”,执行JobB;

JobC也条件依赖于JobA,当JobA中param1的值为“CCC”,执行JobC

​ JobD依赖于JobB、JobC,JobB和JobC有任何一个执行成功后,执行JobD。

​ JobE依赖于JobB、JobC,JobB和JobC都执行成功,执行JobE。

​ JobF依赖于JobB、JobC、JobD、JobE。

JobB、JobC、JobD、JobE都执行完了,执行JobF。

修改上个案例的ten.flow

nodes:
  - name: JobA
    type: command
    config:
      command: sh parameter.sh

  - name: JobB
    type: command
    dependsOn:
      - JobA
    config:
      command: echo "This is JobB."
    condition: ${JobA:param1} == "BBB"

  - name: JobC
    type: command
    dependsOn:
      - JobA
    config:
      command: echo "This is JobC."
    condition: ${JobA:param1} == "CCC"

  - name: JobD
    type: command
    dependsOn:
      - JobB
      - JobC
    config:
      command: echo "This is JobD."
    condition: one_success

  - name: JobE
    type: command
    dependsOn:
      - JobB
      - JobC
    config:
      command: echo "This is JobE."
    condition: all_success

  - name: JobF
    type: command
    dependsOn:
      - JobB
      - JobC
      - JobD
      - JobE
    config:
      command: echo "This is JobF."
    condition: all_done

将parameter.sh、ten.flow和azkaban.project打包成ten.zip 

 

预定义宏将会在所有父作业上评估,即YAML文件中的dependsOn部分。

可用的预定义宏如下:

(1)all_success: 全部成功(默认)

(2)all_done:全部完成

(3)all_failed:全部失败

(4)one_success:至少一个成功

(5)one_failed:至少一个失败

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

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

相关文章

SpringBoot整合企业微信消息推送(四十五)

从头开始&#xff0c;并不意味着失败&#xff0c;相反&#xff0c;正是拥抱成功的第一步&#xff0c;即使还会继续失败 上一章简单介绍了 SpringBoot整合钉钉消息推送(四十四) , 如果没有看过,请观看上一章 一. 企业微信前期准备 用户需要注册一个企业微信&#xff0c; 并且登…

ANR基础 - Input系统

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 文章目录 系列文章目录前言一、Input系统概述二、整体框架1.整体框架类图2.核心启动过程2.1 initialize2.1 I…

浅析一下PTPD

浅聊一下PTPD 文章目录 浅聊一下PTPD1.什么是PTPD2.PTPD源码浅析一下1.src文件1.arith.c2.bmc.c3.constant.h 和 datatypes.h4.display.c5.management.c6.protocol.c7.ptp_datatypes.h8.ptp_primitives.h9.ptp_timers.c10.ptpd.c11.signaling.c12.timedomain.c 2.def文件夹3.de…

ROS:gazebo创建仿真地图,turtlebot3加载仿真地图进行建图,生成yaml和pgm地图信息

一.安装turtlebot3 Ubuntu18.04 实现&#xff1a;安装turtlebot3功能包、虚拟机与机器人之间的网络配置、测试机器人Cartographer建图_Charlesffff的博客-CSDN博客 二.安装gazebo ROS18.04&#xff1a;安装gazebo&#xff0c;下载模型_gazebo下载模型_Charlesffff的博客-CSD…

Linux 设备驱动程序(二)

系列文章目录 Linux 内核设计与实现 深入理解 Linux 内核&#xff08;一&#xff09; 深入理解 Linux 内核&#xff08;二&#xff09; Linux 设备驱动程序&#xff08;一&#xff09; Linux 设备驱动程序&#xff08;二&#xff09; Linux设备驱动开发详解 文章目录 系列文章目…

大型央企集团财务经营分析框架系列(三)

01集团经营管理分析的切入点 集团经营管理分析的切入点往往是从财务分析开始。 往往在一家企业里面&#xff0c;财务方面的信息化建设是要早于其它方面的信息化建设的&#xff0c;业务标准化程度比较高&#xff0c;数据标准化程度也比较高&#xff0c;分析框架也相对成熟。 …

栈和队列的相关功能实现及其基础应用

前言&#xff1a;栈和队列是常见的数据结构&#xff0c;它们在计算机科学中被广泛应用。栈和队列都是一些元素的集合&#xff0c;它们的主要区别在于数据的组织方式和访问顺序。在栈中&#xff0c;元素的添加和删除都在同一端进行&#xff0c;称为栈顶&#xff0c;而在队列中&a…

PMP考试100个主要知识点

1.一个项目在启动阶段会进行量级估算&#xff0c;准确范围是-50至100%。2000版的量级估算准确度为&#xff1a;-25%到75%。 2.质量控制通常先于范围确认执行&#xff0c;但这两个过程可以并列进行参考 3.Cost-plus-fixed-fee(CPFF)成本加固定费用合同。成本补偿型合同包括成本加…

快速入门ChatGPT和AIGC:底层原理、热门工具、行业现状【我们能做什么】

最近大家热议的ChatGPT和AI绘画工具的底层技术原理是什么&#xff1f;是如何发展到现在的&#xff1f;有哪些应用场景、热门工具&#xff1f;AIGC产业上下游有哪些公司&#xff1f;作为普通用户&#xff0c;我们还能接触哪些应用AI技术打造的商业解决方案&#xff1f;…… 我们…

微信小程序 录音+播放组件封装

展示 长按录音 松开结束录音 点击播放 再次点击暂停 再次点击继续播放 展示效果&#xff1a; 录音功能 录音功能&#xff08;手指按下开始录音 手指松开结束录音&#xff09;&#xff1a; 使用wx原生录音功能在 component 外新建 wx.getRecorderManager() RecorderManager…

国巨 :硬件设计基础60条

硬件设计是现代科技发展中至关重要的领域之一。它涵盖了从微电子器件到复杂的系统级设计的各个方面&#xff0c;是现代电子产品的核心。在这篇文章中&#xff0c;我将介绍60个基础概念&#xff0c;这些概念是硬件设计工程师必备的知识&#xff0c;并且是设计出高质量硬件的关键…

【web】学习ajax和fetch

1/什么是ajax ajax 全名 async javascript and XML(异步JavaScript和XML) 是前后台交互的能⼒。 也就是我们客户端给服务端发送消息的⼯具&#xff0c;以及接受响应的⼯具。 在不重新加载整个网页的情况下&#xff0c;对网页的某部分进行更新。而传统的网页(不使用 Ajax)如果需…

设计师必备的5个素材库,马住

今天就告诉大家设计师都是去哪些网站找素材&#xff0c;分享五个网站&#xff0c;解决你80%的设计素材&#xff0c;建议收藏&#xff01; 1、菜鸟图库 https://www.sucai999.com/?vNTYxMjky 这是一个为新手设计师提供免费素材的设计网站&#xff0c;站内有超多平面模板、海报…

成为一名黑客需要学什么

想成为一名专业黑客&#xff0c;但不知道从哪里学起”很多人向盾叔问过这个问题&#xff0c;今天盾叔就为你介绍成为专业黑客必须学习的十个方面的知识&#xff0c;希望能为迷惘中的你指明方向。 一、基本的计算机知识 把它列为第一条&#xff0c;相信很多人肯定会觉得不以为…

Java虚拟机快速入门 | JVM引言、JVM内存结构、直接内存

目录 一&#xff1a;JVM引言 1. 什么是 JVM ? 2. 常见的 JVM 3. 学习路线 二&#xff1a;JVM内存结构 1. 程 序 计 数 器&#xff08;PC Register&#xff09; 2. 虚 拟 机 栈&#xff08;JVM Stacks&#xff09; 3. 本 地 方 法 栈&#xff08;Native Method Stacks&…

Vscode C++环境配置

多文件编译 打开设置搜索coderunner 找到Executor Map 加入-I目录名 目录名/*.cpp 调试 点击调试以后会产生tasks.json文件&#xff0c;加入链接文件和库文件

map用法以及特殊值的情况

map用法以及特殊值的情况 一、map用法的说明 map(callbackFn, thisArg); // callbackFn回调函数&#xff0c;thisArg可选 callbackFn是个回调函数&#xff0c;该回调函数的参数按照顺序为element&#xff08;当前正在处理的元素&#xff09;&#xff0c;index&#xff08;正…

WPF MaterialDesign 初学项目实战(1)首页搭建

前言 最近在学WPF&#xff0c;由于人比较烂&#xff0c;有一个星期没怎么动代码了。感觉有点堕落。现在开始记录WPF项目&#xff0c;使用MaterialDesignInXamlToolkit。 环境搭建 如果没下载MaterialDesign 的源码 github源码运行 在Nuget里面引入MaterialDesign Materia…

数字孪生技术在环境保护领域怎样应用?

近年来&#xff0c;环境保护成为全球范围内的热点话题&#xff0c;各国都在积极探索创新的解决方案。其中&#xff0c;数字孪生技术的出现为环境保护带来了全新的机遇和挑战。数字孪生技术将物理世界与数字世界相结合&#xff0c;通过精确的模拟和实时数据分析&#xff0c;为环…

华为ensp 防火墙的基础配置

拓扑图&#xff1a; [FW3-zone-isp1]set priority 12 #配置防火墙优先级 步骤一 #首先进入防火墙需要输入默认账号和密码&#xff0c;必须修改密码。 [USG6000V1] undo in en #关闭提示。 #先配置ip。 [USG6000V1]ip route-static 0.0.0.0 0.0.0.0 64.1.1.10 #配置去往外网的默…