Azkaban快速入门

因为之前自己工作中有用过Azkaban作为自动化任务调度工具,所以想参考自己之前的使用经验,总结一下关于Azkaban的使用,方便大家使用Azkaban快速实现企业级自动化任务

如何选择市面上的任务调度工具

总体来说,ooize相比azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂,
如果可以不在意某些功能的缺失,轻量级调度器azkaban是很不错的候选对象

什么是Azkaban

Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,主要用于在一个工作流内以一个特定的顺序运行一组工作和流程,
它的配置是通过简单的key:value对的方式,通过配置中的dependencies 来设置依赖关系。
Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

Azkaban的特点

AzkabanWebServer是整个Azkaban工作流系统的主要管理者,它用户登录认证、负责project管理、定时执行工作流、跟踪工作流执行进度等一系列任务

负责具体的工作流的提交、执行,它们通过mysql数据库来协调任务的执行

存储大部分执行流状态, AzkabanWebServerAzkabanExecutorServer都需要访问数据库

部署模式

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

安装依赖包及其作用

该包中就是所有的建表语句,主要是配置 MySQL
azkaban-db-3.84.4.tar.gz

执行服务器(Executor)配置
azkaban-exec-server-3.84.4.tar.gz

服务器(Web)配置
azkaban-web-server-3.84.4.tar.gz

访问端口号

默认是 8443,可以通过修改配置文件 azkaban.properties的方式更改端口号
端口号使用规则: jetty.ssl.port > jetty.port
但是使用 jetty.ssl.port的前提是 jetty.use.ssl = true,这个配置表示开启ssl安全套接层,否则使用jetty.port端口

示例配置文件
jetty.use.ssl=false
jetty.maxThreads=25

jetty.ssl.port=8443
jetty.port=8081

jetty.keystore=keystore
jetty.password=password
jetty.keypassword=password
jetty.truststore=keystore
jetty.trustpassword=password

基本使用

type=command
command=echo 'hello-world'
type=command
command=sh hello-world.sh
type=command
command=/usr/install/spark/bin/spark-submit --class com.test.AzkabanTest test-0.1.0.jar
type=command
command=beeline -u jdbc:hive://localhost:7777 -n hive -p hive -f 'test.sql'
type=command
command=${HADOOP_HOME}bin/hadoop jar hadoop-mapreduce-examples--0.1.0.jar
mapreduce-test ${input} ${output}

使用 dependsOn属性来表示依赖,他的值是一个数组

示例 basic.flow
JobA 和 JobB 执行完了,才能执行 JobC

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

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

  - name: jobC
    type: command
    # jobC 依赖 JobA 和 JobB
    dependsOn:
      - jobA
      - jobB
    config:
      command: echo "I’m JobC"

使用 retriesretry.backoff来配置重试次数,重试的时间间隔

示例 basic.flow,在任务中配置
nodes:
  - name: JobA
    type: command
    config:
      # 执行脚本
      command: sh xxx.sh
      # 重试次数 3次
      retries: 3
      # 重试间隔时间 10000ms 也就是10s
      retry.backoff: 10000

示例 basic.flow,在flow的全局配置
config:
  retries: 3
  retry.backoff: 10000
nodes:
  - name: jobA
    type: command
    config:
      command: sh xxxq.sh
  - name: jobB
  type: command
  config:
    command: sh xxxb.sh
  - name: jobC
    type: command
    dependsOn:
      - jobA
      - jobB
    config:
      command: sh xxxc.sh

Flow View界面右键点击需要重拾的 Job,选择需要的重新执行的某个过程, EnableDisable下面都分别有如下参数:

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

示例 basic.flow
nodes:
  - name: test_java
    type: javaprocess
    config:
      Xms: 96M
      Xmx: 200M
      java.class: com.fx67ll.springboot.AzkabanTest

Azkaban 中预置了几个特殊的判断条件,称为预定义宏,预定义宏会根据所有父 Job 的完成情况进行判断,再决定是否执行,可用的预定义宏如下:

all_success: 表示父 Job 全部成功才执行(默认)
all_done:表示父 Job 全部完成才执行
all_failed:表示父 Job 全部失败才执行
one_success:表示父 Job 至少一个成功才执行
one_failed:表示父 Job 至少一个失败才执行

示例 JobA.sh
echo “do JobA”

示例 JobB.sh
echo “do JobB”

示例 JobC.sh
echo “do JobC”

示例 basic.flow
nodes:
– name: jobA
type: command
config:
command: sh JobA.sh
– name: jobB
type: command
config:
command: sh JobA.sh
dependsOn:
– jobA
– jobB
config:
command: sh JobC.sh
condition: one_success

提交的时候故意不提交 JobB.sh,以测试预定义宏是否生效

在执行工作流时候,选择左下角 Schedule按钮,在 Schedule Flow Options配置即可

YAML

YAML(YAML 不是标记语言)是一种非常灵活的格式,几乎是 JSON 的超集,已经被用在一些著名的项目中,如 Travis CI、Circle CI 和 AWS CloudFormation。
YAML 的库几乎和 JSON 一样无处不在。除了支持注释、换行符分隔、多行字符串、裸字符串和更灵活的类型系统之外,YAML 也支持引用文件,以避免重复代码。

大小写敏感
通过缩进表示层级关系
禁止使用 tab 缩进,只能使用空格键
缩进的空格数目不重要,只要相同层级左对齐即可
使用 # 表示注释

我是 fx67ll.com,如果您发现本文有什么错误,欢迎在评论区讨论指正,感谢您的阅读!
如果您喜欢这篇文章,欢迎访问我的 本文github仓库地址,为我点一颗Star,Thanks~ 😃
转发请注明参考文章地址,非常感谢!!!

Original: https://www.cnblogs.com/fx67ll/p/azkaban-quickstart.html
Author: fx67ll
Title: Azkaban快速入门

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/598966/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 数据库持久化+JDBC数据库连接

    数据持久化就是 将内存中的数据模型转换为存储模型,以及 将存储模型转换为内存中的数据模型的统称。数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。 …

    数据库 2023年6月16日
    0123
  • String类常用的API

    String类常用API总结及注意事项 String类常用的API 字符串内容的比较: 注意: 不能使用 == 去比较两个字符串的内容。原理:比较的是字符串的地址。(如果两个字符串…

    数据库 2023年6月16日
    0104
  • 567.字符串中的排列

    滑动窗口 给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。 换句话说,s1 的排列之一是 s2…

    数据库 2023年6月16日
    077
  • java XML标记语言

    可扩展标记语言( Extensive Markup Language),标签中的元素名是可以自己随意写,可拓展是相对于html来说 标记语言:由一对尖括号括起来 用来当做配置文件 …

    数据库 2023年6月16日
    079
  • 猴子吃桃(递归)

    递归案例实践分析 猴子偷桃 题目描述: 猴子第一天摘下若干桃子,当即吃了一半,觉得好吃不过瘾,于是又多吃了一个,,第二天又吃了前天剩余桃子数量的一半,觉得好不过瘾,于是又多吃了一个…

    数据库 2023年6月16日
    0159
  • [LeetCode]21. 合并两个有序链表

    将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4输出:1-&…

    数据库 2023年6月9日
    096
  • MySQL8.0.x 安装傻瓜式教程【极简】

    MySQL8.0.x 安装 一、下载 MySQL官网下载链接:https://downloads.mysql.com/archives/community/ 选择版本后下载zip文…

    数据库 2023年5月24日
    086
  • StoneDB 读、写操作的执行过程

    背景介绍 StoneDB 是一款兼容 MySQL 的开源 HTAP 数据库。StoneDB 的整体架构分为三层,分别是应用层、服务层和存储引擎层。应用层主要负责客户端的连接管理和权…

    数据库 2023年5月24日
    093
  • zabbix 报表动作日志 报错”503“

    本文来自博客园,作者:xiao智,转载请注明原文链接:https://www.cnblogs.com/yuwen01/p/16216868.html Original: https…

    数据库 2023年6月14日
    083
  • Null和空值对于avg计算时产生的影响以及处理

    为什么要关注这一块呢:1.面试中可能会有涉及 2.工作中真的也可能会用,既然有可能我也用过,就拿出来跟大家分享一下,上一篇的博文,数据已准备好就不做数据准备的介绍了。 step1:…

    数据库 2023年6月6日
    0106
  • Netty-NIO基础

    一. NIO 基础 non-blocking io 非阻塞 IO 1. 三大组件 1.1 Channel & Buffer channel 有一点类似于 stream,它就…

    数据库 2023年6月16日
    077
  • Java中的线程安全与线程同步

    1.为什么需要线程同步 什么是线程安全:指在 被多个线程访问时,程序可以 持续进行正确的处理。 1.1.线程安全问题 案例:通过抢优惠例子说明线程安全问题 public class…

    数据库 2023年6月6日
    088
  • [Mysql]如何查看初次安装后的默认密码

    mysql初次安装时,会设置一个临时密码,不允许用空密码直接登录: ubuntu系统上这个密码的存放位置是 /etc/mysql/debian.cnf Original: http…

    数据库 2023年6月16日
    089
  • 一条SQL更新语句是如何执行的

    文章首发于公众号「蝉沐风」,认真写好每一篇文章,欢迎大家关注交流 这是图解MySQL的第2篇文章,这篇文章会通过 一条SQL更新语句的执行流程让大家清楚地明白: 什么是InnoDB…

    数据库 2023年5月24日
    0106
  • 浅谈事务隔离级别、MVCC及相关特性

    文采不是很好,应该有一些表达不清楚的地方,请改正。 [En] Literary talent is not very good, there should be some uncl…

    数据库 2023年5月24日
    093
  • 项目管理构建工具——Maven(基础篇)

    项目管理构建工具——Maven(基础篇) 在前面的内容中我们学习了JDBC并且接触到了jar包概念 在后面我们的实际开发中会接触到很多jar包,jar包的导入需要到互联网上进行就会…

    数据库 2023年6月14日
    081
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球