Azkaban【基础 01】核心概念+特点+Web界面+架构+Job类型(一篇即可入门Azkaban工作流调度系统)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 【2月更文挑战第6天】Azkaban【基础 01】核心概念+特点+Web界面+架构+Job类型(一篇即可入门Azkaban工作流调度系统)

1. 工作流调度系统解决了什么问题

我曾经参与过一个数据治理的项目,项目的大概流程是【数据获取-数据清洗入库-展示】:

在这里插入图片描述
这时候就出现问题了,数据导入成功后要执行清洗流程,那什么时候数据导入完成呢?又是什么时候开始执行数据清洗流程呢?盯着当然是可以的,但是复杂的流程我们实现了自动化,执行的时候却要人工,比较浪费时间。直接使用crontab可以实现定时,但是无法实现顺序执行。

我们当时自己搭建了一个调度平台,实现的功能是定时调度指定的shell脚本,shell脚本去调用ktr或者kjb脚本并输出日志数据,这个平台解决了数据导入阶段,也解决了数据清洗阶段,但是没能实现自动化,因为不知道数据导入何时结束、导入是否成功,也就没法定时调用清洗脚本,最终,这个平台也被放弃了,我们合并了shell脚本,自己在Linux系统上进行执行及数据校验。:weary:

后来开始学习大数据,大数据相关的组件更多,流程也更多,调度文件就凸显了,例如,某个业务系统每天产生20G原始数据,我们每天都要对其进行处理,处理步骤如下所示:

通过Hadoop先将原始数据上传到HDFS上(HDFS的操作) >> 使用MapReduce对原始数据进行清洗(MapReduce的操作) >> 将清洗后的数据导入到hive表中(hive的导入操作) >> 对Hive中多个表的数据进行JOIN处理,得到一张hive的明细表(创建中间表) >> 通过对明细表的统计和分析,得到结果报表信息(hive的查询操作)。

在这里插入图片描述

这些任务单元 (数据收集、数据清洗、数据存储、数据分析等) ,任务单元及其之间的依赖关系组成了复杂的工作流。复杂的工作流管理涉及到很多问题:

  • 如何定时调度某个任务?
  • 如何在某个任务执行完成后再去执行另一个任务?
  • 如何在任务失败时候发出预警?

工作流调度系统解决了这些实际问题。

2. 特点

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

  • Compatible with any version of Hadoop 兼容任何版本的 Hadoop
  • Easy to use web UI 易于使用的Web用户界面
  • Simple web and http workflow uploads 可以使用简单的 Web 页面进行工作流上传
  • Project workspaces 支持按项目进行独立管理
  • Scheduling of workflows 定时任务调度
  • Modular and pluginable 模块化和可插拔的插件机制
  • Authentication and Authorization 身份认证/授权(权限的工作)
  • Tracking of user actions 跟踪用户操作
  • Email alerts on failure and successes 支持失败和成功的电子邮件提醒
  • SLA alerting and auto killing SLA 警报和自动查杀失败任务
  • Retrying of failed jobs重试失败的任务

这里展示一张简单的前端任务调度流程图:

在这里插入图片描述
还可以进行权限配置:

在这里插入图片描述
项目日志展示:

在这里插入图片描述

3. 与Ooize简单对比

尽管工作流调度器能够解决的需求场景基本一致,但在设计理念、目标用户、应用场景等方面还是存在显著的区别,在做技术选型的时候,可以提供参考:
|特性|Oozie|Azkaban|
|--|--|--|
|工作流描述语言|XML|text file with key/value pairs|
|是否要web容器|Yes|Yes|
|进度跟踪|web page|web page|
|Hadoop Job调度支持|Yes|Yes|
|运行模式|daemon|daemon|
|事件通知|No|Yes|
|支持的hadoop版本|0.20+|Compatible with any version of Hadoop|
|重试支持|Yes|Yes|
|运行任意命令|Yes|Yes|
Azkaban 和 Oozie 都是目前使用最为广泛的工作流调度程序,其主要区别如下:

功能对比

  • 两者均可以调度 Linux 命令、MapReduce、Spark、Pig、Java、Hive 等工作流任务;
  • 两者均可以定时执行工作流任务。

工作流定义

  • Azkaban 使用 Properties(Flow 1.0) 和 YAML(Flow 2.0) 文件定义工作流;
  • Oozie 使用 Hadoop 流程定义语言(hadoop process defination language,HPDL)来描述工作流,HPDL 是一种 XML 流程定义语言。

资源管理

  • Azkaban 有较严格的权限控制,如用户对工作流进行读/写/执行等操作;
  • Oozie 暂无严格的权限控制。

运行模式

Azkaban 3.x 提供了两种运行模式:

  • solo server model(单服务模式) :元数据默认存放在内置的 H2 数据库(可以修改为MySQL),该模式中 webServer (管理服务器) 和 executorServer (执行服务器) 运行在同一个进程中,进程名是 AzkabanSingleServer 。该模式适用于小规模工作流的调度。

  • multiple-executor(分布式多服务模式) :存放元数据的数据库为 MySQL,MySQL 应采用主从模式进行备份和容错。这种模式下 webServer 和 executorServer 在不同进程中运行,彼此之间互不影响,适合用于生产环境。

Oozie 使用 Tomcat 等 Web 容器来展示 Web 页面,默认使用 derby 存储工作流的元数据,由于derby 过于轻量,实际使用中通常用 MySQL 代替。

如果你的工作流不是特别复杂,推荐使用轻量级的 Azkaban,主要有以下原因:

  • 安装方面:Azkaban 3.0 之前都是提供安装包的,直接解压部署即可。Azkaban 3.0 之后的版本需要编译,这个编译是基于 gradle 的,自动化程度比较高;
  • 页面设计:所有任务的依赖关系、执行结果、执行日志都可以从界面上直观查看到;
  • 配置方面:Azkaban Flow 1.0 基于 Properties 文件来定义工作流,这个时候的限制可能会多一点。但是在 Flow 2.0 就支持了 YARM。YARM 语法更加灵活简单,著名的微服务框架 Spring Boot就采用的 YAML 代替了繁重的 XML。

4. 架构

Azkaban的multiple-executor(分布式多服务模式) 由三个关键组件构成:

在这里插入图片描述

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

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

3) 关系型数据库(MySQL):存储大部分执行流状态,AzkabanWebServer和AzkabanExecutorServer都需要访问数据库。

5. Job类型

原生的 Azkaban 支持的 plugin 类型有以下这些,官网也有举例 但是官网很不友好【网速不行、举例不详细、有些文件无法下载 :worried:】 :

  • command:Linux shell命令行任务(最为强大,懂的都懂 :smirk:)
  • gobblin:通用数据采集工具
  • hadoopJava:运行hadoopMR任务
  • java:原生java任务
  • hive:支持执行hiveSQL
  • pig:pig脚本任务
  • spark:spark任务
  • hdfsToTeradata:把数据从hdfs导入Teradata
  • teradataToHdfs:把数据从Teradata导入hdfs

----------------------------------------【以下举例都是flow1.0语法】----------------------------------------

  1. command类型 job配置举例
    type=command
    # 只要是Linux命令能够实现的操作 这里都能执行 所以说这种类型最为强大
    command=echo "This is azkaban cmd ... "
    command.1=who am i
    # 依赖前一个job 配置文件为 cmd1.job 
    dependencies=cmd1
    
  2. java类型 job配置举例【我更原因使用command类型的job调度Java代码】
    type=javaprocess
    # 所有相关代码所在的文件夹
    classpath=/home/azkaban/*
    # 要执行的主类
    java.class=AzkabanTest
    
  3. hadoopJava类型举例【依然可以使用command类型】
    type=hadoopJava
    # 所有相关代码所在的文件夹
    classpath=./lib/*,${azkaban.home}/lib/*
    job.extend=false
    # 主类
    job.class=azkaban.jobtype.examples.java.WordCount
    # 配置
    force.output.overwrite=true
    input.path=/input
    output.path=/output
    
  4. hive类型举例【依然可以使用command类型】
    type=hive
    # 代理用户
    user.to.proxy=azkaban
    # 所有相关代码所在的文件夹
    classpath=./lib/*,${azkaban.home}/lib/*
    azk.hive.action=execute.query
    # 执行的SQL文件
    hive.script=/hive.sql
    
  5. spark类型举例【依然可以使用command类型】
    type=spark
    # master配置
    master=yarn-cluster
    # 执行的jar包
    execution-jar=lib/spark-template-1.0-SNAPSHOT.jar
    # 执行的主类
    class=com.dataeye.template.spark.WordCount
    # 参数信息
    params=hdfs://de-hdfs/data/yann/info.txt  paramtest
    

    6. 总结

    我也使用过 xxl-job 任务调度系统,xxl-job 有它的优势,但是无法实现工作流就是说 job 之间的依赖需要我们自己在后台进行维护【这样就增加了 job 之间的耦合】,实际上我并不清晰 Azkaban 是如何判断当前 job 执行完成的?有知道的小伙伴,欢迎分享!
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
24天前
|
前端开发
【前端web入门第四天】02 CSS三大特性+背景图
本文详细介绍了CSS的三大特性:继承性、层叠性和优先级,并深入讲解了背景图的相关属性,包括背景属性、背景图的平铺方式、位置设定、缩放、固定以及复合属性。其中,继承性指子元素自动继承父元素的文字控制属性;层叠性指相同属性后定义覆盖前定义,不同属性可叠加;优先级涉及选择器权重,包括行内样式、ID选择器等。背景图部分则通过具体示例展示了如何设置背景图像的位置、大小及固定方式等。
239 91
|
24天前
|
前端开发
【前端web入门第四天】01 复合选择器与伪类选择器
本文档详细介绍了CSS中的复合选择器与伪类选择器。复合选择器包括后代选择器、子代选择器、并集选择器和交集选择器,能够更精确地定位和样式化元素。后代选择器用于选中某元素的所有后代,子代选择器仅选中直接子元素。并集选择器可为多个标签设置相同样式,而交集选择器则选中同时满足多个条件的元素。此外,还介绍了伪类选择器,如鼠标悬停效果和超链接的不同状态。
51 32
【前端web入门第四天】01 复合选择器与伪类选择器
|
2天前
|
存储 移动开发 数据库
HTML5 Web IndexedDB 数据库常用数据存储类型
IndexedDB 支持多种数据存储类型,满足复杂数据结构的存储需求。它包括基本数据类型(如 Number、String、Boolean、Date)、对象(简单和嵌套对象)、数组、Blob(用于二进制数据如图像和视频)、ArrayBuffer 和 Typed Arrays(处理二进制数据)、结构化克隆(支持 Map 和 Set 等复杂对象),以及 JSON 数据。尽管不直接支持非序列化数据(如函数和 DOM 节点),但可以通过转换实现存储。开发者应根据具体需求选择合适的数据类型,以优化性能和使用体验。
|
24天前
|
前端开发
【前端web入门第三天】02 CSS字体和文本
本文详细介绍了CSS中字体和文本的相关属性。字体部分涵盖字体大小、粗细、样式、行高、字体族及`font`复合属性,通过具体示例展示了如何设置和使用这些属性。文本部分则讲解了文本缩进、对齐方式、修饰线及文字颜色等属性,并提供了实用的代码示例。此外,还简要介绍了调试工具中的一些细节,如错误属性标识和属性生效状态的控制。
51 28
|
6天前
|
缓存 Kubernetes Java
阿里云 SAE Web:百毫秒高弹性的实时事件中心的架构和挑战
SAE 事件中心通过智能诊断显示通知与用户连接起来,SAE WEB 百毫秒弹性实例给事件中心带来了新的实时性、海量数据和高吞吐的挑战,本篇将带您了解 SAE 整体事件中心的架构和挑战。
|
12天前
|
监控 Android开发 iOS开发
深入探索安卓与iOS的系统架构差异:理解两大移动平台的技术根基在移动技术日新月异的今天,安卓和iOS作为市场上最为流行的两个操作系统,各自拥有独特的技术特性和庞大的用户基础。本文将深入探讨这两个平台的系统架构差异,揭示它们如何支撑起各自的生态系统,并影响着全球数亿用户的使用体验。
本文通过对比分析安卓和iOS的系统架构,揭示了这两个平台在设计理念、安全性、用户体验和技术生态上的根本区别。不同于常规的技术综述,本文以深入浅出的方式,带领读者理解这些差异是如何影响应用开发、用户选择和市场趋势的。通过梳理历史脉络和未来展望,本文旨在为开发者、用户以及行业分析师提供有价值的见解,帮助大家更好地把握移动技术发展的脉络。
|
9天前
|
前端开发 开发者 Python
从零到一:Python Web框架中的模板引擎入门与进阶
在Web开发的广阔世界里,模板引擎是连接后端逻辑与前端展示的重要桥梁。对于Python Web开发者而言,掌握模板引擎的使用是从零到一构建动态网站或应用不可或缺的一步。本文将带你从基础入门到进阶应用,深入了解Python Web框架中的模板引擎。
14 3
|
11天前
|
网络协议 安全 中间件
系统架构设计师【第2章】: 计算机系统基础知识 (核心总结)
本文全面介绍了计算机系统及其相关技术,涵盖计算机系统概述、硬件、软件等内容。计算机系统由硬件(如处理器、存储器、输入输出设备)和软件(系统软件、应用软件)组成,旨在高效处理和管理数据。硬件核心为处理器,历经从4位到64位的发展,软件则分为系统软件和应用软件,满足不同需求。此外,深入探讨了计算机网络、嵌入式系统、多媒体技术、系统工程及性能评估等多个领域,强调了各组件和技术在现代信息技术中的重要作用与应用。
22 3
|
11天前
|
运维 安全 网络安全
Web安全-企业网络架构
Web安全-企业网络架构
16 1
|
24天前
|
前端开发 JavaScript
【前端web入门第三天】01 css定义和引入方式 四种标签选择器
本文档详细介绍了CSS的基础知识及其应用。内容涵盖了CSS的定义、CSS在HTML中的引入方式,包括内部样式表、外部样式表及行内样式表的使用场景与方法。此外,还深入解析了不同种类的选择器:标签选择器、类选择器、ID选择器以及通配符选择器的功能与应用场景,并提供了实例帮助理解。最后,通过具体的新属性示例,指导如何使用这些选择器来实现基本的盒子绘制。适合初学者系统学习CSS。
35 15
下一篇
无影云桌面