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 的相关文章

  • 亚马逊 Linux - 安装 openjdk-debuginfo?

    我试图使用jstack在 ec2 实例上amazon linux 所以我安装了openjdk devel包裹 sudo yum install java 1 7 0 openjdk devel x86 64 但是 jstack 引发了异常j
  • Apache LOG:子进程 pid xxxx 退出信号分段错误 (11)

    Apache PHP Mysql Linux 注意 子进程 pid 23145 退出信号分段错误 11 tmp 中可能存在 coredump 但 tmp下没有找到任何东西 我怎样才能找到错误 PHP 代码中函数的无限循环导致了此错误
  • 如何回忆上一个 bash 命令的参数?

    Bash 有没有办法回忆上一个命令的参数 我通常这样做vi file c其次是gcc file c Bash 有没有办法回忆上一个命令的参数 您可以使用 or 调用上一个命令的最后一个参数 Also Alt can be used to r
  • 如何指定配置脚本的包含目录

    我的工作场所有一个 Linux 系统 其中包含相当旧的软件包 并且没有 root 访问权限 我正在从源代码编译我需要的包 prefix somewhere in homedir 我的问题是我只是不知道如何说服配置在特定目录中查找头文件 源码
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判
  • 如何在 bash_profile 文件中添加导出语句?

    我正在尝试了解是否必须添加导出语句来在 bash profile 文件中设置变量 我该怎么做呢 例如 如果我必须添加 export AX name 那么我应该将其简单地写在文件末尾还是我还需要编写其他内容 简单写一下export AS na
  • 打印本周星期一的日期(在 bash 中)

    我想获取本周星期一的 YYYYMMdd 格式的日期 例如 今天是 20110627 从明天到周日 我仍然想打印周一 今天 的日期 然后下周重复这个过程 monday date dmonday Y m d last monday date d
  • 为什么无论 -rdynamic 如何,backtrace 都不包含 Objective-C 符号?

    Update 我正在 Linux 上使用 GNU 运行时 问题是not发生在带有 Apple 运行时的 MacOS 上 更新2 我在 MacOS 上编译了 GNU 运行时并用它构建了示例 该错误确实not发生在带有 GNU 运行时的 Mac
  • C++ Linux GCC 应用程序中的 GUID

    我有很多服务器运行这个 Linux 应用程序 我希望他们能够生成一个碰撞概率较低的 GUID 我确信我可以从 dev urandom 中提取 128 个字节 这可能没问题 但是有没有一种简单易用的方法来生成与 Win32 更等效的 GUID
  • 有没有办法提高linux管道的性能?

    我正在尝试使用 64 位将超高速数据从一个应用程序传输到另一个应用程序CentOS http en wikipedia org wiki CentOS6 我使用以下方法进行了基准测试dd发现阻碍我的是管道而不是程序中的算法 我的目标是达到
  • 通过名称获取进程ID

    我想在 Linux 下获得一个给定其名称的进程 ID 有没有一种简单的方法可以做到这一点 我还没有在 C 上找到任何可以轻松使用的东西 如果追求 易于使用 char buf 512 FILE cmd pipe popen pidof s p
  • GCC 详细模式输出解释

    我是 Linux 新手 谁能向我解释一下我的 hello world 程序的以下详细模式输出 另外 这些文件是做什么用的crt1 o crti o crtend o crtbegin o and crtn o and lc and lgcc
  • PHP 日志文件颜色

    我正在编写一个 PHP 日志文件类 但我想为写入文件的行添加颜色 我遇到的问题是颜色也会改变终端的颜色 我想要实现的是仅更改写入日志文件的行的颜色 class logClass extends Singleton private funct
  • php56 - CentOS - Remi 仓库

    我刚刚在测试盒上安装了 php 5 6 正常的 cli php 解释器似乎不存在 gt php v bash php command not found gt php56 v PHP 5 6 13 cli built Sep 3 2015
  • 期待、互动,然后再次期待

    有几篇关于相同内容的帖子 但我仍然无法使我的期望脚本正常工作 我的目的是自动化一切 但保留用户输入的密码 所以脚本有 3 个部分 自动登录 给予用户交互以输入密码 将控制权交还给 Expect 脚本以继续工作 所以我有一个将生成的脚本 其中
  • 在Linux中将日期附加到文件名

    我想在文件名旁边添加日期 somefile txt 例如 somefile 25 11 2009 txt 或 somefile 25Nov2009 txt 或任何类似的内容 也许脚本或终端窗口中的某些命令可以执行 我正在使用Linux Ub
  • 为什么“script”命令会生成 ^[ 和 ^M 字符以及如何使用 vim 搜索和替换删除它们?

    在linux上 使用bash shell 当我使用script命令时 生成的文件称为typescript 当我用 vim 打开该文件时 每一行都包含 M字符 并且有几行 由于我的彩色命令提示符 包含一个字符 我想用任何东西替换这些字符 从而
  • bash "&" 不打印 "[1]+ Done "

    我在 bashrc 中调用一个脚本来打印打开终端时收到的新消息数 我希望该调用在访问网络时是非阻塞的 有时需要几秒钟 这意味着我无法使用终端直到完成 但是如果我输入 mailcheck 在我的 bashrc 中 它工作正常 但然后打印一个空
  • Linux mremap 不释放旧映射?

    我需要一种方法将页面从一个虚拟地址范围复制到另一个虚拟地址范围 而无需实际复制数据 范围很大 延迟很重要 mremap 可以做到这一点 但问题是它也会删除旧的映射 由于我需要在多线程环境中执行此操作 因此我需要旧映射能够同时使用 因此稍后当
  • 如何获取 bash 中从 Ping 接收到的数据包的百分比?

    当 ping 主机时 我希望输出仅显示收到的数据包 已发送 5 个 的百分比 我想我需要使用grep不知怎的 但我不知道如何 我是 bash 编程的新手 这是我所在的地方 ping c 5 q host grep grep 中应该包含什么

随机推荐

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

    说到后台技术栈 脑海中是不是浮现的是这样一幅图 有点眼晕 以下只是我们会用到的一些语言的合集 而且只是语言层面的一部分 就整个后台技术栈来说 这只是一个开始 从语言开始 还有很多很多的内容 今天要说的后台是大后台的概念 放在服务器上的东西都
  • 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条件工作流