关于调度器:突破单点瓶颈挑战海量离线任务Apache-Dolphinscheduler在生鲜电商领域的落地实践

30次阅读

共计 6470 个字符,预计需要花费 17 分钟才能阅读完成。

点亮 ⭐️ Star · 照亮开源之路

GitHub:https://github.com/apache/dol…

精彩回顾

近期,食行生鲜的数据平台工程师单葛尧在社区线上 Meetup 上给大家分享了主题为《Apache Dolphinscheduler 在食行生鲜的落地实际》的演讲。

随着大数据的进一步倒退,不论是离线任务量还是实时任务量都变得越来越多,对调度零碎的要求也越来越高,不仅要求零碎稳固还要求操作简略,上手不便。

而 Apache Dolphinscheduler 就是当下十分风行且好用的一款调度零碎。首先它是分布式运行且是去中心化的,其次有一个十分好的页面,使得调度的工作变得非常容易上手。

讲师介绍

单葛尧

食行生鲜 数据平台工程师

文章整顿:硕磐科技 - 刘步龙

明天的演讲会围绕上面三点开展:

  1. 背景介绍
  2. 施行落地
  3. 元数据系统 Datahub 与 Dolphinscheduler 集成

背景介绍

我司食行生鲜是一家采纳“预订制”模式,通过全程冷链配送和社区智能冷柜自提形式,为用户提供优质生鲜服务的新批发企业。

随着业务倒退,大量的离线同步及计算工作 开始对咱们的数据架构的易用性与稳定性带来了挑战。

01 数据架构

上图是咱们目前的基础架构体系,次要是批处理和流解决。批处理次要是以 Hive 和 Spark 为主的的全量数仓的分级计算。流解决以 Flink 为主,次要用于用户轨迹实时 ETL 和实时业务监控,目前采纳美柚开源的巨鲸平台,后续会陆续迁徙 Apache 新晋我的项目 StreamPark 中,它反对多个版本的 Flink,提供一系列开箱即用的连接器,大大加重了开发部署实时工作的复杂度。

咱们的数据起源有 MySQL、PostgreSQL、物流供应链端的 SQLServer 数据、同行的数据及风控类的数据。绝对应的日志类数据十分多且简单,故数据类型也多种多样。

咱们的业务主体有两种:业务产生的数据 ,比如说用户去下单,用户的各种余额,积分优惠券; 埋点零碎的轨迹数据,比如说用户的点击、下单、进入商品详情等行为轨迹类操作;

一般来说,T+ 1 的数据采纳离线计算,轨迹数据用的是实时计算。

抽数工具是以 Sqoop 为主,其次是 binlog 生产,对于 局部不反对的数据源,就用了 Apache SeaTunnel。

通过数仓的简单计算之后,咱们的上游数据的 OLAP 场景次要以 TiDB 和 GreenPlum 为主。

TiDB 使用于业务的查问,比方查问近 7 日某商品的购买量;

GreenPlum 次要以外部的看板为主。比方团体外围的财务指标,经营部门的经营成绩及绩效指标;另外会用 HBase 存储一些维度数,ElasticSearch 存储一些算法模型训练出的画像后果。

Kylin 用于指标体系。它服务于咱们外部的指标计算。比方站点状态的监控,展示业务成绩的各维度。比方明天的实时订单状况,是否须要向供应链增派人力,最近下单的数据流向是否有猛增等景象,以此来调整销售策略。

02 DMP 的能力与组成

工作数量随着业务倒退日益增长,数据资产的治理、数据品质的监控 等问题愈发严厉,DMP(Data Management Platform)的需要应运而生。

一般而言,DMP 衍生出数据利用,数据利用包含以下能力:

决策反对类:主题报表(月度 / 季度 / 年度 / 专题)、舆情监控、热点发现、大屏数据可视化展现等;

数据分析类:交互式商业智能、OLAP 剖析、数据挖掘、数据驱动的机器学习等;

数据检索类:全文检索、日志剖析、数据血统剖析、数据地图等;

用户相干:用户画像服务、用户成长 / 散失剖析及预测、点击率预测、智能举荐等;

市场相干:数据服务于搜索引擎、数据服务于举荐引擎、热点发现、舆情监控等;

制作生产相干:预测性保护、生产过程实时数据监控、数字孪生等;

施行落地

日益增长的业务零碎数据催生了对调度零碎的高可用要求,原有自研的 单节点调度零碎不再适宜咱们以后的业务体量。

咱们开始在市面上调研新的调度工具,然而咱们不仅须要调度零碎 是分布式高可用 ,还能 简略易用 ,对无编程教训的分析师们提供 敌对的交互体验 ,对开发人员也能够 反对高扩展性,便于前期能够随着业务增长良好的扩大其可反对的工作类型及集群规模。

01 抉择 Apache DolphinScheduler

最终咱们抉择了海豚调度,然而对于我司调度零碎的倒退经验了几个工具的迁徙。

最开始用的是 Azkaban,因为一些历史起因,后续弃用了 Azkaban;随后自研了一套调度零碎,而随着业务数据的激增,自研零碎存在的一个致命问题:该零碎为单点式,没有方法扩大资源,只能单机运行

去年六月份,咱们对 AirFlow 和 Dolphinscheduler 做了一个调研。面对业务场景,咱们心愿以 SQL 的模式去定义 flow;心愿零碎以分布式的模式运行,而不是单机,以此来解决单机的瓶颈问题;

AirFlow 的技术栈是 Python,而公司次要是以 Java 为主;

通过比拟,咱们最终抉择了 Dolphinscheduler。

02 施行落地

去年 6 月,首次在 生产环境接入 了 DolphinScheduler 的 1.3.6 版本,通过业务的锻炼与社区的共建,现已胜利更新至 3.0.0,至今服务于我司一年无余,均匀每日稳固运行 6000+ 工作

03 工作执行

咱们在应用 DolphinScheduler 时,次要应用其 Shell 组件,外部封装了 Hadoop 相干 Tools,用来通过 Shell 提交相干 SQL,并指定工作提交的 Yarn 资源队列。

咱们依据 DolphinScheduler 外部的五个优先级 HIGHEST、HIGH、MEDIUM、LOW、LOWEST 也别离创立了五个对应的 Yarn 资源队列,便于依据流程的优先级提交到指定的优先级队列,更好的去利用并分配资源。

在原有的 Worker 线程池的期待队列中,把从原有的 LinkedBlockingQueue 转换 PriorityBlockingQueue,以实现超 Worker 其 exec-threads 时能够按照其设定的优先级从新排序,实现高优先级工作在出现异常时,能够在资源较满的状况下 实现“插队”成果。

04 告警策略

DolphinScheduler 提供了开箱即用的多种告警组件。

  • Email 电子邮件告警告诉
  • DingTalk 钉钉群聊机器人告警,相干参数配置能够参考钉钉机器人文档。
  • EnterpriseWeChat 企业微信告警告诉相干参数配置能够参考企业微信机器人文档。
  • Script 咱们实现了 Shell 脚本告警,会将相干告警参数透传给脚本,在 Shell 中实现相干告警逻辑,如果须要对接外部告警利用,这是一种不错的办法。
  • FeiShu 飞书告警告诉
  • Slack Slack 告警告诉
  • PagerDuty PagerDuty 告警告诉
  • WebexTeams WebexTeams 告警告诉 相干参数配置能够参考 WebexTeams 文档。
  • Telegram Telegram 告警告诉 相干参数配置能够参考 Telegram 文档。
  • HTTP Http 告警,调用大部分的告警插件最终都是 Http 申请。依据 Alert SPI 的设计,为其扩大了两个插件:外部 OA 告诉 + 阿里云电话告警,以保障服务的可用性及数据产出的及时性。DolphinScheduler 的 Alert SPI 设计的相当优良,咱们在新增插件时,只需关注扩大 org.apache.dolphinscheduler.alert.api.AlertChannelFactory 即可。另外,DolphinScheduler 的 告警笼罩场景也相当宽泛,能够依据工作流及工作的平时的实现工夫来设置超时工夫,与新出的数据品质模块相结合,能够较好的保证数据的及时性与准确性。

元数据系统 Datahub 与 Dolphinscheduler 集成

Datahub 由 LinkedIn 开源,原来叫做 WhereHows。通过一段时间的倒退 Datahub 于 2020 年 2 月在 Github 开源,首先简略介绍一下 Datahub 这个零碎。

01 总体架构

DataHub 是一个古代数据目录,旨在实现端到端的数据发现、数据可察看性和数据治理。

这个可扩大的元数据平台是为开发人员构建的,以应答其疾速倒退的数据生态系统的复杂性,并让数据从业者在其组织内充分利用数据的价值。

02 搜寻元数据

DataHub 的统—搜寻反对跨数据库、数据湖、BI 平台、ML 性能存储、编排工具等显示后果。

反对的 Source 相当丰盛,目前截止 v0.8.45 已有

Airflow、Spark、Great Expectations、Protobuf Schemas、Athena、Azure AD、BigQuery、Business Glossary.ClickHouse.csv、dbt、Delta Lake、Druid、ElasticSearch.Feast、FileBased Lineage、File、Glue.SAP HANA、Hive、lceberg.Kafka Connect、Kafka、LDAP、Looker、MariaDB、Metabase、Mode、MongoDB、MicrosoftsQLServer、MySQL、Nifi、Okta、OpenAPI、Oracle,Postgres、PowerBl、Presto onHive、Pulsar、Redash.Redshift、S3 Data Lake.SageMaker、Salesforce、Snowflake、Other SQLAlchemydatabases、Superset.Tableau、Trino、Vertica 等。

03 血统反对

可通过跨平台、数据集、ETL/ELT 管道、图表、仪表板等跟踪血统, 疾速理解数据的端到端的流向。

与市面上其余元数据系统不—样的是,Datahub 始终反对从数据集到 B 看板的整个流向的追踪,曾经为咱们提供了如 Redash、SuperSet 之类开源 看板的元数据接入。

04 元数据的抽取步骤

第一步:开启元数据采集和创立密钥的权限;

第二步:抉择所摄取血统的数据源(除了以后所反对的外,也反对自定义);

第三步:配置采集血统的表以及上游走向;

第四步:设置时区与定时,元数据采集就会像咱们的调度零碎一样,定时调取实现采集。

05 Metadata Ingestion 架构

Pull-based lntegration

DataHub 附带一个基于 Python 的元数据摄取零碎,该零碎能够连贯到不同的源以从中提取元数据。而后,此元数据通过 Kafka 或 HTTP 推送到 DataHub 存储层。元数据摄取管道能够与 Airflow 集成,以设置打算摄取或捕捉血统。

Push-based Integration

只有您能够向 Kafka 收回元数据更改倡议 (MCP) 事件或通过 HTTP 进行 REST 调用,您就能够将任何零碎与 DataHub 集成。

为不便起见,DataHub 还提供简略的 Python 发射器供您集成到零碎中,以在源点收回元数据更改(MCP-s)。

06 Datahub 与 Dolphinscheduler 集成

计划一 通过 Kafka 作为 MetadataChangeEvent 收回简略的 dataset 到 dataset 的血统

import datahub.emitter.mce_builder as builder

计划二:通过 Rest 去 emit 血缘关系。

import datahub.emitter.mce_builder as builder

上述模式实用于所有 dataset 到 dataset 的血缘关系构建,能够在任何数据集解决下应用。

后续在社区的奉献打算

01 对流解决的反对(flink stream 与 debezium)

在社区 PMC 蔡顺峰的帮忙下,当初曾经实现了对流工作的初步集成,能够通过 Flink sdk 去提交工作到 Yarn,可视化的启动、进行、Savepoint,直观的在列表里看到工作的 Yarn Application ID 和 Job ID 等信息。

接下来的 TODO LIST 顺峰曾经写在 related items

  • flink 集群治理
  • 反对 flink sql
  • 减少 flink 的 metric
  • 反对其余流工作(如 kafka connector)
  • 事件驱动调度(最终目标)

02 与版本管理工具的集成(GIT 与 SVN)

社区的确是能人辈出,咱们筹备的这个 RoadMap,我不仅在 DSIP 里找到了提案,而且提案还提到了以下几个资源插件:

  • GitHub
  • GitLab
  • Amazon S3
  • AliCloud OSS

当然,基于底层 Decorator implementation 的存在,该 Resource Plugin 会十分的易于扩大。

过后在筹备 Data Quality 相干开发时,就惊喜的发现社区提供了相干的提案,咱们仅是在 3.0.0 上稍作改变,就投入了生产环境的应用,提供了咱们数据准确性、及时性等多重保障。

咱们前期筹备在该根底上 扩大社区的 HiveCli 插件,并把咱们目前的工程逐渐从 SVN 迁徙到 Git 上,以解脱目前纯 Shell 应用,让分析师们更关注于业务。

03 更好的与 yarn 集群及队列的治理与应用

我司目前的所有资源调度都是基于 Yarn 的,包含所有的 MapReduce、Spark 及 Flink 工作,对立都由 Yarn 来治理。

因为历史遗留起因及测试生产环境的隔离等因素,目前集群存在多套 Yarn 环境,每个 Yarn 的资源总量及策略配置各不相同,导致治理艰难。

再者,基于 DolphinScheduler 设计来看,Yarn 队列与执行的用户绑定,用户来定义默认的租户及提交队列。这个设计不太合乎生产环境的要求,租户来定义数据的权限,队列来定义工作的资源,前面咱们会把队列独自作为一个配置或是间接把提交队列和工作的优先级绑定。

Yarn 环境的多套集群治理,能够前期近程提交工作到指定集群,来替换掉目前的计划,前期能够在调度里能够间接监控调度零碎里的工作在 Yarn 的一些运行状态。

04 更好的与 DataHub 的集成

给大家提供一个好用的 Python 插件,SqlLineage, 可解析 SQL 语句中的信息。

给定一个 sql 语句,sqllineage 将告诉您源表和指标表。如果您想要血统后果的图形可视化,能够切换它的切换图形可视化选项,此时就会启动一个 web,在浏览器中显示血统后果的 DAG 图,目前我司基于此组件解析了咱们版本管理工具下的所有 sql,在此基础上构建了咱们的上下游血统。

前期咱们将会按照 Datahub 的 Airflow 组件性能,扩大开发 Datahub 的 Dolphinscheduler 元数据组件。

[lineage]

Datahub 的 Airflow 血统配置如上所示,能够发现 Datahub 为 Airflow 提供了开箱即用的 acryl-datahub[airflow] 插件,提供以下性能:

  • Airflow Pipeline (DAG) metadata
  • DAG and Task run information
  • Lineage information when present

咱们会扩大 Dolphinscheduler 的 Python Gateway 能力,后续将会回馈到社区,心愿能够为大家提供更好的元数据系统集成体验。

参加奉献

随着国内开源的迅猛崛起,Apache DolphinScheduler 社区迎来蓬勃发展,为了做更好用、易用的调度,真挚欢送酷爱开源的搭档退出到开源社区中来,为中国开源崛起献上一份本人的力量,让外乡开源走向寰球。

参加 DolphinScheduler 社区有十分多的参加奉献的形式,包含:

奉献第一个 PR(文档、代码) 咱们也心愿是简略的,第一个 PR 用于相熟提交的流程和社区合作以及感触社区的友好度。

社区汇总了以下适宜老手的问题列表:https://github.com/apache/dol…

非老手问题列表:https://github.com/apache/dol…

如何参加奉献链接:https://dolphinscheduler.apac…

来吧,DolphinScheduler 开源社区须要您的参加,为中国开源崛起添砖加瓦吧,哪怕只是小小的一块瓦,汇聚起来的力量也是微小的。

正文完
 0