暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

大数据组件:工作流任务调度管理(一)常见工作流任务调度管理概述

畅谈Fintech 2022-01-23
2935
 


上一节我们总结了数仓的一些知识包括:建模、数仓的分层、数据的装载等。


这节我们就来概述一下数仓中的工作流调度任务知识、管理工具。包括简单的crontab命令、复杂调度管理工具:Oozie、Azkaban、Airflow、DolphinScheduler等。当然这些组件和工具不仅仅只是用在数仓中,很多涉及资源调度的项目也使用它们。




一、工作流调度管理工具

‍‍‍
1、为什么需要工作流调度工具?

我们先来看一下数据的流转走向:外部数据流被采集、到HDFS、再到数仓ODS、DWD、DIM、DWS、DWT、ADS层经过一系列的清洗、加工、汇总等多个工作任务。其中包括shell脚本、hive脚本、java程序jar包等各个任务单元之间组织调度,并且彼此还有相对的复杂的依赖关系。

对于这样复杂执行的计划,整个的执行过程都需要人工参加,并且需要人工盯着各任务的进度,很多任务都是凌晨时间,单单依靠脚本控制来调度显然是不合理的,需要一个更加高效、功能更加全面的工作流调度系统管理工具来调度执行。


2、简单的任务调度工具
简单的任务调度一般是直接使用linux的crontab来定义。或者是基于crontab做的一些变体。
2.1、crontab命令
比如:同步3台hadoop服务器集群时间(和阿里云时钟同步服务器)
crontab -e
*/1 * * * * /usr/sbin/ntpdate ntp4.aliyun.com;
这种简单调度可以解决简单调度问题,但是存在的问题也比较明显:
  • 如果任务没有按照指定执行,失败后,无从追溯;
  • 大量的crontab任务没有统一管理;
  • 多服务器crontab分散在多集群上,调度混乱;

2.2、基于crontab的WEBUI管理工具

于是出现了一些基于crontab任务的调度的webUI的一些系统工具。
CronHub is a better crontab, it is a web application which can schedule, monitor and control the crontabs of multiple machines from the web page.
https://github.com/machanic/CronHub
cronHub是暴风影音公司开源的时间调度系统。通过webUI界面来管理分散在不同机器上的crontab任务。页面如下:

存在问题:

如果任务之间有依赖关系的,crontab没有办法满足需求。

解决办法有以下几个:

  • 设置每个任务时间和顺序,每个任务估算大概的执行时间;

  • 利用Zookeeper组件通知机制;

  • shell/python脚本将任务job串起来组成一个DAG图

但是后续依然存在很大问题:
  • 当工作流任务变多,依赖关系更为复杂;

  • 不能统一视角,直观描述各任务调度和关系。

  • 数仓里面充斥着大量的ETL任务:

  • 有些依赖某个时间点去执行,有些依赖数据或者外部的事件来执行。

  • 任务失败,需要有重试和报警功能,而不是等到整个工作流失败才发现问题。

2、复杂工作流调度系统框架

于是出现了复杂工作流的调度系统框架。一般一个 workflow scheduler system需要的主要功能有:
  • DAG定义
    定义方式:表达式,脚本定义,通过WEB UI定义;还需要支持子DAG等;
  • 执行节点
    节点类型:unix cmd,shell,python,mapreduce, logging
  • 节点控制
    ignore, retry, suspend, run now, test mode等;
  • Metrics
    需要对比一段时间内任务的运行时间;
  • Monitor
    失败策略,报警通知功能;
  • CLI & Web UI
    查询 workflow 执行情况,以及简单的控制;

市面上目前常见的工作流调度系统:Oozie,Azkaban,Airflow,DolphinScheduler等。





二、Oozie


1、简介
Oozie is a workflow scheduler system to manage Apache Hadoop jobs.
https://oozie.apache.org/
Oozie是一个基于工作流引擎的开源框架,是由Cloudera公司贡献给Apache是一个管理hadoop任务的工作流/协调系统。它能提供对Hadoop MapReduce和Pig Jobs的任务调度与协调。通过对XML文件格式来实现流程的定义。对于工作流系统一般会用很多不同功能的节点,比如分支、并发、汇合等等。

2、Oozie特点
与Hadoop生态圈结合紧密。比如:
  • 有MapReduce的Action,定义一个mapreduce任务很方便,而且可以直接通过job id关联到hadoop history页面;
  • Oozie任务的资源文件都必须存放在HDFS上;
  • Action也方便扩展,比如添加自定义的任务类型或者报警方式;


3、Oozie缺点

总体上属于重量级的资源调度管理工具。总体设计功能丰富全面,配置维护成本高。市面上使用的公司也比较多,它是通过XML文件来定义DAG依赖。借助CDH平台,HUE可视化组件来使用相对比较友好、易用;如果脱离HUE使用是比较繁琐困难的。需要编辑大量的XML文件来配置任务。





二、AzKaban


1、简

Azkaban is a batch workflow job scheduler created at LinkedIn to run Hadoop jobs. Azkaban resolves the ordering through job dependencies and provides an easy to use web user interface to maintain and track your workflows.

https://azkaban.github.io/
Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。和Oozie一样目前市面上使用的也比较多。属于轻量级工作流调度管理工具。


2、特点

根据官方的描述有如下特点 


Azkaban和Oozie一样,也属于Hadoop生态圈。它的DAG定义方式比Oozie简单很多,在properties文件里面可以通过dependencies指定任务的上游依赖。Azkaban支持可插拔的扩展插件,方便扩展,比如支持pid,hive等。

Azkaban的特点是所有的任务资源文件都需要打成一个zip包上传。这个在资源文件较大的时候不是太方便,当前也可以进行扩展,比如存放在HDFS上,任务实际运行的时候才拉到本地。

界面如下:





三、Airflow


1、简

Airflow is a platform created by the community to programmatically author, schedule and monitor workflows

https://airflow.apache.org/

Airflow 是一个 Airbnb 的 Workflow 开源项目,使用Python编写实现的任务管理、调度、监控工作流平台。Airflow 是基于DAG(有向无环图)的任务管理系统,可以简单理解为是高级版的crontab,但是它解决了crontab无法解决的任务依赖问题。与crontab相比Airflow可以方便查看任务的执行状况(执行是否成功、执行时间、执行依 赖等),可追踪任务历史执行情况,任务执行失败时可以收到邮件通知,查看错误日志。


2、特点

4大设计原则Principles

  • Scalable 可扩展的

Airflow 具有模块化架构,并使用消息队列来编排任意数量的工作人员。气流已准备好扩展到无穷大。

  • Dynamic 动态的

气流管道在 Python 中定义,允许动态管道生成。这允许编写动态实例化管道的代码。

  • Extensible 可扩展的

轻松定义用户自己的运算符并扩展库以适应适合用户环境的抽象级别。

  • Elegant 优雅的

气流管道简洁明了。使用强大的 Jinja 模板引擎将参数化内置到其核心中。

4大特征

  • Pure Python 纯Python

不再需要命令行或 XML!使用标准 Python 功能创建工作流程,包括用于调度的日期时间格式和用于动态生成任务的循环。这使用户可以在构建工作流程时保持完全的灵活性。

  • Useful UI 良好的用户UI

通过强大而现代的 Web 应用程序监控、安排和管理工作流程。无需学习旧的、类似 cron 的接口。用户始终可以全面了解已完成和正在进行的任务的状态和日志。

  • Robust Integrations 强大的集成

Airflow 提供了许多即插即用的操作符,可以随时在 Google Cloud Platform、Amazon Web Services、Microsoft Azure 和许多其他第三方服务上执行用户的任务。这使得 Airflow 易于应用于当前的基础设施并扩展到下一代技术。

  • Easy to Use 使用方便

任何具有 Python 知识的人都可以部署工作流。Apache Airflow 不限制管道的范围;用户可以使用它来构建 ML 模型、传输数据、管理用户的基础架构等等。



四、Dolphin Scheduler


1、简

Apache DolphinScheduler is a distributed and extensible workflow scheduler platform with powerful DAG visual interfaces, dedicated to solving complex job dependencies in the data pipeline and providing various types of jobs available out of box.
https://dolphinscheduler.apache.org/zh-cn/index.html
DolphinScheduler是一个分布式、去中心化、易扩展的可视化DAG工作流任务调度系统,其致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。DolphinScheduler是2019年中国易观公司开源的一个调度系统,2021年3月已经从Apache孵化器毕业。目前已经蜕变为一个经过数百家企业生产环境检验的成熟调度系统产品。算是调度系统产品新星!


2、特点


  • 高可靠性
    去中心化的多Master和多Worker服务对等架构, 避免单Master压力过大,另外采用任务缓冲队列来避免过载
  • 简单易用
    DAG监控界面,所有流程定义都是可视化,通过拖拽任务完成定制DAG,通过API方式与第三方系统集成, 一键部署。
  • 丰富的使用场景
    支持多租户,支持暂停恢复操作. 紧密贴合大数据生态,提供Spark, Hive, M/R, Python, Sub_process, Shell等近20种任务类型。
  • 高扩展性
    支持自定义任务类型,调度器使用分布式调度,调度能力随集群线性增长,Master和Worker支持动态上下线。

架构图如下:









总结:

  1. 了解为什么需要工作流任务调度管理工具;

  2. 会使用crontab对简单脚本文件调度;

  3. 常见工作流任务调度管理工具的特点。包括Oozie、AzKaban、airflow、以及dolphinscheduler。





参考:
  1. https://github.com/machanic/CronHub
  2. https://oozie.apache.org/
  3. https://azkaban.github.io/
  4. https://airflow.apache.org/
  5. https://dolphinscheduler.apache.org/zh-cn/index.html








文章转载自畅谈Fintech,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论