Azkaban

2023-11-11


前言

  随着数据分析系统的逐渐完善,现今一套成熟的数据分析系统都是大量 任务单元 组成,且各个任务单元之间存在 时间或者依赖关系,为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行。Azkaban作为一套成熟,轻量且功能完善的任务调度系统,可以胜任的充当任务调度的工作。


一、Azkaban是什么?

Azkaban官网

  上图是Azkaban官网首页,Azkaban是一个 Open-source Workflow Manager ,开源的工作流管理系统。Azkaban能够将由包含时间和依赖关系的各个工作单元组成的工作流,按照关系生成调度任务计划,然后按照计划顺序执行工作流的各个任务。另外,Azkaban还为工作流提供负载均衡,失败重试等等机制来确保任务的执行成功。

二、Azkaban与其他的工作流调度系统

1.简单的任务调度系统

  1. Linux的Crontab
  2. java web 的 springSchedule

   简单的任务调度系统,一般只能确定本任务的执行频率。无法按照依赖关系进行 “接力” 的形式执行工作流,只能预估当前任务所依赖上一个任务执行完成的时间,从而确定当前任务的时间,当任务依赖关系复杂时无法满足要求。

2.复杂的任务调度

  1. Azkaban 轻量,功能够用,调度可靠,支持 Web页面操作
  2. Oozie 较Azkaban重量,功能齐全,但是配置繁重,在CDH环境中可以使用 Web页面操作较友好
  3. Airflow python语言开发,需要了解python
  4. DolphinScheduler 国产系统,支持Web,流行度高

   复杂任务调度系统,可以很好的解决存在时间和依赖关系的任务工作流。Azkaban作为老牌任务调度系统,开源轻量且稳定。

三、Azkaban架构

Azkaban架构

Azkaban由三部分构成:

  1. Relational Database(Mysql)
      azkaban将大多数状态信息都存于MySQL中,Azkaban Web Server 和 Azkaban Executor Server也需要访问DB。

  2. Azkaban Web Server
      提供了Web UI,是用户操作Azkaban的入口,也是Azkaban任务调度的主要管理者,包括 project 的管理,认证,调度,对工作流执行过程的监控等。

  3. Azkaban Executor Server
      调度工作流和任务,纪录工作流活任务的日志,之所以将AzkabanWebServer和AzkabanExecutorServer分开,主要是因为在某个任务流失败后,可以更方便的将重新执行。而且也更有利于Azkaban系统的升级

四、Azkaban配置

  1. azkaban.project
      由于Azkaban解析flow格式的Flow-Api有新旧两个版本,分别是 .propertise 和 .yml。所以再编写核心的配置的时候,需要先指定配置文件类型,一般采用新的Flow-API方式解析flow文件(.yml),即 azkaban-flow-version: 2.0

  2. basic.flow
      配置任务工作流的核心配置,后面以 azkaban.project 配置采用新的Flow-API方式解析flow文件 为例

basic.flow 基础配置
nodes: 工作流数组
    ----------------------------- 基础参数 ----------------------------
 1. name: job名称
    Type: job类型,command(命令), javaprocess(java程序)
    Config: job的配置
         command: 任务启动时执行的命令
    ------------------------------------------------------------------
    
         ---------------- 自动重试(web页面可设置手动重试) -----------------
         retries: 重试次数 	
         retry.backoff: 重试的时间间隔	
         --------------------------------------------------------------
         
         ------------------------ javaprocess -------------------------
         Xms: 最小堆内存
         Xmx: 最大堆内存
         classpath: 类路径
         java.class: main()全类名,jar包与flow文件同包上传时,可使用相对路径
         main.args: main方法的参数
         --------------------------------------------------------------

basic.flow条件工作流

  条件工作流功能允许用户自定义执行条件来决定是否运行某些Job。条件可以由当前Job的父Job输出的运行时参数构成,也可以使用预定义宏。

  1. 条件为当前Job的父Job输出的运行时参数
1)基本原理:
(1)父Job将参数写入 JOB_OUTPUT_PROP_FILE 环境变量所指向的文件
(2)子Job使用 ${jobName:param} 来获取父Job输出的参数并定义执行条件
2)条件运算符:
 同 java运算符,==,!=,>,<,&&,||,! 等
# 需求
#	JobA执行一个shell脚本。
#	JobB在JobA完成后执行,但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"									# 执行 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会根据当日日期决定是否执行。

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

#(2)新建JobC.sh
	#!/bin/bash
	echo "do JobC"									# 执行 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文件 => 执行作业 => jobA成功, JobB失败,而JobC依然可以执行


五、邮件报警

  Azkaban作为一个任务调度系统,对于任务执行情况的监控不只体现在 Web页面展现,还提供原生的邮件报警支持,只需要简单的配置,就可以将 指定的任务 执行成功或失败的消息,通过邮件发送给开发者。

  1. 在azkaban-web节点上,编辑 conf/azkaban.properties ,配置发件方信息
#这里设置邮件发送服务器,需要 申请邮箱,切开通stmp服务,以下只是例子
mail.sender=tang@163.com
mail.host=smtp.163.com		# 邮箱的smtp服务器地址
mail.user=tang@163.com
mail.password=xxx 			# 邮箱的授权码
  1. 需要重启 azkaban-web

  2. 配置收件方信息,选择工程 => Excuoter Flow => Notifaction => Failure/Success Emails
    Azkaban邮件预警收件方配置

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Azkaban 的相关文章

  • 应用程序中两个不同版本的库

    考虑一个场景 其中有两个不同版本的共享库 考虑 A 1 so 链接到 B so A 2 so 链接到 C so 现在 B so 和 C so 都链接到 d exe 当 B so 想要调用 A 1 so 中的函数时 它最终会调用 A 2 so
  • 如何将一个文本文件拆分为多个 *.txt 文件?

    我有一个文本文件file txt 12 MB 包含 something1 something2 something3 something4 有没有办法分开file txt分成 12 个 txt 文件 比方说file2 txt file3 t
  • 如何获取与 shell 中的文件名模式匹配的所有文件的总文件大小?

    我正在尝试仅使用 shell 来计算与文件名模式匹配的所有文件 在目录树中 的总大小 以字节为单位 这是我到目前为止所拥有的 find name undo exec stat c s awk 总计 1 END 打印总计 有没有更简单的方法来
  • bash 将输出重定向到文件,但结果不完整

    重定向命令输出的问题已经被问过很多次了 但是我有一个奇怪的行为 我使用的是 bash shell debian 版本 4 3 30 1 release 并尝试将输出重定向到文件 但并非所有内容都记录在文件中 我尝试运行的 bin 文件是 l
  • 更新Linux中的包含路径

    我的 my path to file 文件夹中有几个头文件 我知道如何将这些文件包含在新的 C 程序中 但每次我都需要在包含它之前输入头文件的完整路径 我可以在linux中设置一些路径变量 以便它自动查找头文件吗 您可以创建一个 makef
  • Bash:将字符串添加到文件末尾而不换行

    如何将字符串添加到文件末尾而不换行 例如 如果我使用 gt gt 它将添加到文件末尾并换行 cat list txt yourText1 root host 37 echo yourText2 gt gt list txt root hos
  • Ruby:在 Ubuntu 上安装 rmagick

    我正在尝试在 Ubuntu 10 04 上安装 RMagick 看起来here https stackoverflow com questions 1482823 is there an easy way to install rmagic
  • 链接错误:命令行中缺少 DSO

    我对 Linux 使用 Ubuntu 14 04 LTS 64 位 相当陌生 来自 Windows 并且正在尝试移植我现有的 CUDA 项目 当通过链接时 usr local cuda bin nvcc arch compute 30 co
  • Linux shell 从用户输入中获取设备 ID

    我正在为一个程序编写安装脚本 该程序需要在其配置中使用 lsusb 的设备 ID 因此我正在考虑执行以下操作 usblist lsusb put the list into a array for each line use the arr
  • “git add”返回“致命:外部存储库”错误

    我刚刚进入 git 的奇妙世界 我必须提交我对程序所做的一系列更改 位于名为的目录中 var www myapp 我创建了一个新目录 home mylogin gitclone 从这个目录中 我做了一个git clone针对公共回购 我能够
  • 在 x86 汇编语言中获取文件大小的简单方法

    假设我已经在汇编中打开了一个文件 并且在寄存器 eax 中有该文件的文件句柄 我将如何获取文件的大小 以便为其分配足够的缓冲区空间 我在这里研究了另一个讨论 建议使用sys fstat 28 系统调用来获取文件统计信息但无法实现它 My a
  • 如何在 Linux 上通过 FTP 递归下载文件夹 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • 在内核代码中查找函数的最佳方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我开始浏览内核代码 遇到的一件事是如何跟踪函数调用 结构定义等 有没有一种好的方法可以快速跳转到函数定义并退出 我尝试过 Source N
  • 仅使用containerd(不使用Docker)修剪容器镜像

    如果我刚刚containerd安装在 Linux 系统上 即 Docker 是not安装 如何删除未使用的容器映像以节省磁盘空间 Docker 就是这么方便docker system prune https docs docker com
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • 为什么 Linux 没有 DirectX API?

    在考虑现代显卡的 Windows 系统上 DirectX API 的驱动程序端实现时 我想知道为什么此实现在非 Windows 系统 尤其是 Linux 上不可用 由于明显缺乏此功能 我只能假设有一个我无视的充分理由 但在我的原始理解中 我
  • linux下无法创建僵尸进程

    嗯 我有一个奇怪的问题 我无法在我的项目中创建僵尸进程 但我可以在其他文件中创建僵尸进程 有简单的说明 int main if fork 0 printf Some instructions n else sleep 10 wait 0 r
  • 调用 printf 系统子例程在汇编代码中输出整数错误[重复]

    这个问题在这里已经有答案了 来回 在windows7控制台窗口中运行gcc s2 asm 然后生成一个exe文件 运行a exe 然后崩溃 为什么 s2 asm 代码由以下源代码生成 int m m 1 iprint m s2 asm请参考
  • 如何为 Linux 桌面条目文件指定带有相对路径的图标?

    对于我的一个 Linux 应用程序 我有应用程序二进制文件 一个 launcher sh 脚本 针对 LD LIBRARY PATH 和一个 desktop 文件 所有这些都位于同一文件夹中 我想使用图标的相对路径而不是绝对路径 我试过了
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下

随机推荐

  • 【架构】从零开始搭建创业公司后台技术栈

    说到后台技术栈 脑海中是不是浮现的是这样一幅图 有点眼晕 以下只是我们会用到的一些语言的合集 而且只是语言层面的一部分 就整个后台技术栈来说 这只是一个开始 从语言开始 还有很多很多的内容 今天要说的后台是大后台的概念 放在服务器上的东西都
  • Matlab——绘图(二维/三维/隐函数)

    本篇博客是对educoder上相关题目 知识的总结 目录 前言 一 二维图形的绘制 1 楔子 2 绘图函数 plot函数 第一种调用方法 第二种调用方法 第三种调用方式 3 双纵坐标绘图函数 plotyy函数 4 绘制二维图形其他函数 5
  • mysql使用group by查询报错SELECT list is not in GROUP BY clause and contains nonaggregated column...

    在sql命令行中输入select sql mode 这时我们能够看到自己的sql mode配置 其中如果有ONLY FULL GROUP BY 那它就是group by查询报错的罪魁祸首了 然后就是mac系统中修改mysql的配置 针对ma
  • HarmonyOS建立一个漂亮的页面

    1 常用基础组件 基础组件是视图层的基本组成单元 包括Text Image TextInput Button LoadingProgress等 1 Text组件用于在界面上展示一段文本信息 可以包含子组件Span 2 Image组件用来渲染
  • 在Qt工程中调用GmSSL

    本文属于 GmSSL国密加密算法库使用系列教程 之一 欢迎查看其它文章 我们知道GmSSL有一个命令行工具gmssl exe 可以通过命令实现很多的操作 同时GmSSL还提供了动态库 所以如果我们想调用GmSSL 有2种方法 通过启动一个外
  • 探秘高逼格艺术二维码的制作过程-AI绘画文生图

    前几天看到几个逼格比较高的二维码 然后自己动手做了一下 给大家看看效果 平台限制 已加马赛克 1 文生图 狮子 2 文生图 城市 下边将开始介绍怎么做的 有兴趣的可以继续读一读 这里使用的AI绘图工具是Stable Diffusion 没有
  • 常用的DOM知识点

    节点的nodeType属性可以显示这个节点具体的类型 nodeType值 节点类型 1 元素节点 例如 p 和 p div 3 文字节点 8 注释节点 9 document节点 10 DTD节点 访问元素节点的常用方法 document g
  • android studio设置jdk版本项目设置和全局设置(保姆级图文)

    步骤 系列文章 方法1 修改项目的gradle构建jdk 建议在使用别人的单个项目时使用 方法2 修改所有项目的gradle构建jdk 自己的项目使用 全局项目应用 总结 系列文章 提示 转到安卓学习专栏 观看更多内容 点我直达 gt 安卓
  • HIT Software Construction blog 1

    软件构造已经开课两周了 再肝了12h实验后终于有时间简单回顾这两周的内容 记录一下我对一些知识点的理解 1 Views and Quality Objectives of Software Construction Muti dimensi
  • nginx编译安装

    在服务器快速集群环境搭建中 都迫切需要一个能拿来即用的负载均衡器 nginx在1 9版本之前 只支持http协议web服务器的负载均衡 从1 9版本开始以后 nginx开始支持tcp的长连接负载均衡 但是nginx默认并没有编译tcp负载均
  • Python代理池健壮性测试 - 压力测试和异常处理

    大家好 在构建一个可靠的Python代理池时 除了实现基本功能外 我们还需要进行一系列健壮性测试来确保其能够稳定运行 并具备应对各种异常情况的能力 本文将介绍如何使用压力测试工具以及合适的异常处理机制来提升Python代理池的可用性 并为您
  • 父类,子类与继承的关系

    先有父类 再有子类 先析构子类 再析构父类 第一 子类对象在创建时会首先调用父类的构造函数 第二 父类构造函数执行结束后 执行子类的构造函数 第三 当父类的构造函数有参数时 需要在子类的初始化列表中显示调用 第四 析构函数调用的先后顺序与构
  • Linux date命令实现日期查询与UTC时戳转换

    需求 使用shell自带date命令查询x天后日期 在当前时间UTC时戳之间相互转换 查询命令 date d 1 day ago Tue Oct 27 09 35 34 CST 2020 d参数支持自然语言输入 无符号默认为 date d
  • Windows下捕获802.11数据包

    摘要 Windows下无法直接用wireshark 原因是因为捕获802 11帧需要设置网卡为监控模式 即monitor mode 非混杂模式 因此我们需要使用microsoft network monitor 微软提供的一个免费检测工具来
  • 【论文阅读】LSKNet: Large Selective Kernel Network for Remote Sensing Object Detection

    这是南开大学在ICCV2023会议上新提出的旋转目标检测算法 基本原理就是通过一系列Depth wise 卷积核和空间选择机制来动态调整目标的感受野 从而允许模型适应不同背景的目标检测 论文地址 https arxiv org pdf 23
  • 【华为OD机试】通过软盘拷贝文件 (C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 语言限定 C clang11 C clang 11 Pascal fpc 3 0 2 Java jav
  • 解析http中的xml, 同时返回xml文件

    需要先导入架包 这是一个解析request中xml SuppressWarnings rawtypes private HashMap
  • 【基于 GitLab 的 CI/CD 实践】01、GitLab CI/CD 基础概念

    目录 一 为什么要做 CI CD 1 1 背景 传统的应用开发发布模式 问题 1 2 持续集成与持续交付 持续集成 CI 持续交付 CD 持续部署 CD 1 3 CI CD 的价值体现 1 4 推荐常用的 CI CD 工具 Jenkins
  • 把自己的博客推荐到百度、Google等主要搜索引擎

    谷歌搜索自己的博客 搜索不到 可以設置公開 添加記錄 會比較方便 如果不把你的博客提交到各大搜索引擎中 它们一般是不会收录你的博客的 你可以先尝试一下看看能不能在百度搜到你的博客吧 如果搜不到的话说明你的博客还没有被百度收录 那么怎么才能被
  • Azkaban

    文章目录 前言 一 Azkaban是什么 二 Azkaban与其他的工作流调度系统 1 简单的任务调度系统 2 复杂的任务调度 三 Azkaban架构 四 Azkaban配置 basic flow 基础配置 basic flow条件工作流