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

在介绍Azkaban之前,我们先来看一下现有的两个工作流任务调度系统。知名度比较高的应该是Apache Oozie,但是其配置工作流的过程是编写大量的XML配置,而且代码复杂度比较高,不易于二次开发。另外一个应用也比较广泛的调度系统是Airflow,但是其开发语言是Python。由于我们团队内部使用Java作为主流开发语言,所以选型的时候就被淘汰掉了。我们选择Azkaban的原因基于以下几点:

提供功能清晰,简单易用的Web UI界面
提供job配置文件快速建立任务和任务之间的依赖关系
提供模块化和可插拔的插件机制,原生支持command、Java、Hive、Pig、Hadoop
基于Java开发,代码结构清晰,易于二次开发
2. Azkaban的适用场景
实际项目中经常有这些场景:每天有一个大任务,这个大任务可以分成A,B,C,D四个小任务,A,B任务之间没有依赖关系,C任务依赖A,B任务的结果,D任务依赖C任务的结果。一般的做法是,开两个终端同时执行A,B,两个都执行完了再执行C,最后再执行D。这样的话,整个的执行过程都需要人工参加,并且得盯着各任务的进度。但是我们的很多任务都是在深更半夜执行的,通过写脚本设置crontab执行。其实,整个过程类似于一个有向无环图(DAG)。每个子任务相当于大任务中的一个流,任务的起点可以从没有度的节点开始执行,任何没有通路的节点之间可以同时执行,比如上述的A,B。总结起来的话,我们需要的就是一个工作流的调度器,而Azkaban就是能解决上述问题的一个调度器。

3. Azkaban架构
Azkaban在LinkedIn上实施,以解决Hadoop作业依赖问题。我们有工作需要按顺序运行,从ETL工作到数据分析产品。最初是单一服务器解决方案,随着多年来Hadoop用户数量的增加,Azkaban 已经发展成为一个更强大的解决方案。

Azkaban由三个关键组件构成:

关系型数据库(MySQL)
AzkabanWebServer
AzkabanExecutorServer


3.1 关系型数据库(MySQL)

Azkaban使用数据库存储大部分状态,AzkabanWebServer和AzkabanExecutorServer都需要访问数据库。

AzkabanWebServer使用数据库的原因如下:

项目管理:项目、项目权限以及上传的文件。
执行流状态:跟踪执行流程以及执行程序正在运行的流程。
以前的流程/作业:通过以前的作业和流程执行以及访问其日志文件进行搜索。
计划程序:保留计划作业的状态。
SLA:保持所有的SLA规则
AzkabanExecutorServer使用数据库的原因如下:

访问项目:从数据库检索项目文件。
执行流程/作业:检索和更新正在执行的作业流的数据
日志:将作业和工作流的输出日志存储到数据库中。
交互依赖关系:如果一个工作流在不同的执行器上运行,它将从数据库中获取状态。
3.2 AzkabanWebServer

AzkabanWebServer是整个Azkaban工作流系统的主要管理者,它负责project管理、用户登录认证、定时执行工作流、跟踪工作流执行进度等一系列任务。同时,它还提供Web服务操作的接口,利用该接口,用户可以使用curl或其他ajax的方式,来执行azkaban的相关操作。操作包括:用户登录、创建project、上传workflow、执行workflow、查询workflow的执行进度、杀掉workflow等一系列操作,且这些操作的返回结果均是json的格式。并且Azkaban使用方便,Azkaban使用以.job为后缀名的键值属性文件来定义工作流中的各个任务,以及使用dependencies属性来定义作业间的依赖关系链。这些作业文件和关联的代码最终以*.zip的方式通过Azkaban UI上传到Web服务器上。

3.3 AzkabanExecutorServer

以前版本的Azkaban在单个服务中具有AzkabanWebServer和AzkabanExecutorServer功能,目前Azkaban已将AzkabanExecutorServer分离成独立的服务器,拆分AzkabanExecutorServer的原因有如下几点:

某个任务流失败后,可以更方便的将其重新执行
便于Azkaban升级
AzkabanExecutorServer主要负责具体的工作流的提交、执行,可以启动多个执行服务器,它们通过mysql数据库来协调任务的执行。

Azkaban是什么相关推荐

  1. Azkaban入门(启动一个Simple Example)

    Azkaban简介 azkaban是一个开源的任务调度系统 Azkaban是一套简单的任务调度服务,整体包括三部分webserver.dbserver.executorserver. 开发语言为Jav ...

  2. azkaban 与 java任务_Azkaban的任务类型分析35:JavaProcessJob的执行

    我们知道,在azkaban内部有好几种调度程序,那么一个java程序怎么被执行的呢? ========================================================= ...

  3. azkaban工作流调度器及相关工具对比

    本文转载自:工作流调度器azkaban,主要用于架构选型,安装请参考:Azkaban安装与简介,azkaban的简单使用 为什么需要工作流调度系统 一个完整的数据分析系统通常都是由大量任务单元组成: ...

  4. Oozie和Azkaban的技术选型和对比

    https://blog.csdn.net/gaoqida/article/details/52165204 一.Azkaban和Oozie的工作流程 1.1 Azkaban工作流程 Azkaban将 ...

  5. 使用azkaban调度spark任务

    这篇文章主要向大家介绍使用azkaban调度spark任务,主要内容包括基础应用.实用技巧.原理机制等方面,希望对大家有所帮助. Azkaban是一种相似于Oozie的工作流控制引擎,能够用来解决多个 ...

  6. 案例实操:Azkaban调度spark作业

    新建AccessLogDriverCluster类 package com.it19gong.clickproject;import java.sql.PreparedStatement; impor ...

  7. Azkaban任务调度(使用带有依赖的任务调度)【mapreduce数据清洗,数据入hive库,kylin预编译、数据分析】

    1 Azkaban任务调度管理 1.1 执行任务的脚本编写和说明 在做任务调度的过程中,要编写相应的脚本. -rwxrwxrwx 1 root root 809 6月 12 19:52 auto-ex ...

  8. Azkaban实战,Command类型单一job示例,任务中执行外部shell脚本,Command类型多job工作flow,HDFS操作任务,MapReduce任务,HIVE任务

    1.Azkaban实战 Azkaba内置的任务类型支持command.java Command类型单一job示例 1.创建job描述文件 vi command.job #command.job typ ...

  9. Azkaban安装部署,配置文件配置,启动等

    1 Azkaban安装部署 准备工作 Azkaban Web服务器 azkaban-web-server-2.5.0.tar.gz Azkaban执行服务器 azkaban-executor-serv ...

  10. 工作流调度系统介绍,常见工作流调度系统对比,azkaban与Oozie对比,Azkaban介绍与特性(来自学习笔记)

    1. 工作流调度器azkaban 1.1 概述 1.1.1为什么需要工作流调度系统 一个完整的数据分析系统通常都是由大量任务单元组成:shell脚本程序,java程序,mapreduce程序.hive ...

最新文章

  1. 机器学习实践中的10个小秘诀!
  2. Linux awk 命令 说明
  3. Spring Boot 配置中的敏感信息如何保护?
  4. 为啥月饼也能变成期货?
  5. 适配器模式真的很简单
  6. 【网络流24题----01】飞行员配对方案问题
  7. java触发器如何创建表_Java中 创建Oracle触发器的问题。
  8. artsy 爬虫_让我们得到Artsy! 使用神经网络创建自定义Snapchat过滤器!
  9. 【上电即上华为云】华为云openCPU智联模组_Cat.1_MC615-CN-L610-CN_GPS定位器
  10. linux下ntp服务配置
  11. linux指令打开网址,linux 如何使用命令打开网址
  12. 报表开发工具ActiveReports实战应用教程——分组报表
  13. 2.资料下载:C语言学习
  14. python 报错:UnicodeEncodeError: ‘gbk‘ codec can‘t encode character ‘\xa5‘ in position 65
  15. 云麦体脂秤华为体脂秤_华为智能体脂秤(蓝牙版),会是良心之选吗?
  16. VMware--局域网访问电脑中VMware虚拟机
  17. 计算机系统实验六:程序的链接
  18. python读matlab.fig_python可视化:matplotlib学习笔记
  19. 计算机控制系统fcs是,在计算机控制系统中,FCS是指()。A.集散控制系统B.数字仪表控制系统C.现场总线控制系统...
  20. Close与Dispose的区别

热门文章

  1. 科技品牌如何建立软文营销策略实现业务目标
  2. 运营商关闭2g服务器,中国联通正在关闭2G网络 但用户完全不必恐慌
  3. 多个字典合并为数据框
  4. 2022-2028全球与中国品牌大使软件市场现状及未来发展趋势
  5. mysql 保存 带图标的微信昵称
  6. 计算机的运算器总线结构,第三章 运算方法与运算器
  7. 【程序人生】:程序员练级攻略
  8. Protostuff使用示例
  9. JDK8版本JAVA运行错误:找不到或无法加载主类 HelloJava的原因及解决方案
  10. chrome 扩展开发 - 如何获得iframe中的元素 和 相关问题解答