首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Apache DolphinScheduler 在腾讯音乐的应用实践

大家下午好,我是来自腾讯音乐的杜延龙,在公司中,主要负责数据中台产品的研发工作。这篇文章主要是基于Apache DolphinScheduler架构,面向TME企业管理域数据的开发、测试、项目管理发布、运维流程一体化实践,希望对你有帮助!

文|杜延龙

编辑整理|曾辉

讲师介绍

杜延龙

腾讯音乐大数据

1

需求背景

在使用?Apache?DolphinScheduler?之前,我们每天有超过上千任务在运行,数据量也达到了TB级别

在原有的调度方案中,我们主要使用Crontab?和?Airflow,任务类型包括自定义程序、数据集成的 DataX 作业和 SQL 任务。

在开发方面,需要基于?Crontab?和?Airflow 具备一定的开发技能,并安装各种集成开发环境(IDE)。

不同开发环境之间的差异需要额外的调整时间,导致开发周期延长,代码维护成本也逐渐增加。

此外,数据源信息都是以代码形式进行维护,这给代码安全和数据源安全带来了挑战。在测试方面,测试人员需要深入代码进行测试,效率相对较低。

运维和监控方面,无论是 Crontab 还是 Airflow,都缺乏全流程的监控能力。

此外,代码管理和团队管理方面也存在困难。在发布过程中,所有的数据开发工作都是基于代码进行的,配置内容增多会导致人为失误和线上 bug 的增加,这是可以避免的。

2

产品选型

基于这些问题,我们决定构建一个统一的数据开发平台。

在选型过程中,我们考虑了以下几个产品的性能和功能:

Airflow

Oozie

Taier

Azkaban

DolphinScheduler

Airflow?和?Oozie都需要编码工作,如编写 Python 代码或 XML 配置。

近年来,Azkaban?社区活跃度较低,并存在一些问题。

Taier?是一个新的项目,但稳定性较弱,并且在验证过程中发现了一些业务问题。

最终,我们选择了?Apache?DolphinScheduler,因为它具有较为活跃的社区、丰富的功能扩展性和文档支持。

3

功能拓展与改造

我们选择 Apache DolphinScheduler 之后进行了二次开发,主要集中在以下几个方面。

业务版本管理

首先是业务版本管理,原有的版本管理无法满足我们的业务需求。

我们建立了一个独立的业务版本管理功能,每次新迭代开发时,在这里维护一个新的业务版本。在创建或编辑任务和工作流时,如果是开发过程中的编辑,我们将其保存在草稿箱中,不会提交到业务版本。

在发布之前,我们可以将工作流或任务提交到具有业务含义的业务版本上,并建立与底层的工作流和任务定义表的映射关系。在运行过程中,我们将业务版本转换为物理版本,并进行执行和展示。

这样,我们在提交时可以选择具有业务含义的版本。

优化发布过程

我们发现原有的导出导入功能在开发、测试和生产环境中的发布过程中存在问题。做了适配之后,将测试环境中的资源ID转换为名称,并在导出的工作流 JSON 中进行导出。

在新环境中进行导入时,再将这些名称适配为新环境的资源ID。

这样,导入后的工作流可以直接使用,避免了跨环境发布后资源无法找到。

数据探索功能

在项目开发和测试过程中,通常需要在不同的数据源和工具之间切换,差异化环境给开发带来了一定负担。为了解决这个问题,我们将数据探索功能集成到 Apache DolphinScheduler 中。

开发人员可以直接在平台上选择数据源类型和对应的数据源信息,并进行 SQL 编辑和测试运行。执行完毕后,结果会进行展示。

未来,我们还计划将 SQL 直接生成作业的功能加入平台。

任务依赖

我们对开源版本进行了定制化改造。除了常见的任务依赖,我们加入了三种特定的依赖类型。首先是内部依赖,针对平台内部的跨项目指定工作流任务是否完成。

其次,我们支持检查 Airflow 任务的运行情况,将 Airflow 的数据源注册到平台,并检查同一周期内的任务是否完成。

最后,我们支持数据依赖,可以通过编写 SQL 检查业务系统数据的状态是否满足运行条件。

为了满足业务需求,我们将任务的创建从工作流中拆分出来,任务可以脱离工作流单独创建,修改后,任务可以单独创建和编辑,开发人员确认无误后,将其关联到工作流中。

这时因为任务还未加入工作流,无法独立运行,这时会自动创建一个虚拟工作流来运行任务,并在前端展示时做了筛选,避免虚拟工作流实例显示在界面上。

此外,程序会定期清理虚拟工作流实例,避免对性能造成影响。

全链路监控

通过 Apache DolphinScheduler 平台,可以查看工作流和任务实例运行过程的基础监控;

但针对一些特殊场景时监控不到的,如平台挂掉时未及时调起的高优先级任务或执行时间超长的任务。

我们开发了一些小工具,对?DS?和?Airflow?进行监控,包括应调度未调度、应完成未完成和失败实时告警等监控场景的补充。

任务异常分类

在开发过程中任务遇到异常时,我们通常需要查看任务运行日志、结合? DolphinScheduler 的日志和其他工具(如 Yarn 和 Starrocks)的日志来排查问题。

然而,这个过程需要查看大量的日志,并且需要逐个任务进行定位和排查,效率较低。

为了解决这个问题,我们建立了一个规则库,用于记录运行错误的任务日志,并将其分类保存在任务异常表中。通过程序对这些日志按照规则进行分类,为每个任务添加异常原因和分类标记。基于这些数据,我们可以提供相应的异常分析报告、平台运营看板、异常定位等。

此外,针对工作流和任务的多人编辑问题,我们引入了锁机制,确保同一时间只有一个人可以编辑或提交。

另外,我们改进了资源上传编辑的流程,避免了对多个任务逐一修改资源的繁琐操作。

数据源安全管理

我们将数据源的密码放置在密码服务中,而非本地存储,以确保数据源密码的安全性。

此外,我们还进行了其他数据源扩展和元数据采集的工作。

通过元数据采集的 SDK,我们可以创建数据采集作业并指定要采集的数据源和范围,并配置定时周期进行采集。

我们还进行了一些bug?修复,例如修复了 SQL 文件中逗号分号分割的 SQL 的支持等。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/ONEwtCTUt7HY04DK82P2LnaQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com