写点什么

百度 MEG 数据开发治理平台 -TDS

作者:百度Geek说
  • 2024-09-10
    上海
  • 本文字数:7541 字

    阅读完需:约 25 分钟

百度MEG数据开发治理平台-TDS

导读

百度 MEG 的上一代大数据产品存在平台分散、质量不均和易用性差等问题,导致开发效率低下、学习成本高,业务需求响应迟缓。为了解决这些问题,百度 MEG 内部开发了图灵 3.0 生态系统。图灵 3.0 覆盖了数据全生命周期,包括 Turing Data Engine (TDE) 计算引擎、Turing Data Studio (TDS) 数据开发治理平台和 Turing Data Analysis (TDA) 可视化 BI 产品。

TDS 作为图灵 3.0 的核心组件,专注于数据开发和治理。其架构涵盖了从基础设施到用户功能的各个层次,包括数据开发、数仓管理、监控运维和资源管理等模块,支持高效的任务调度、资源管理和数据血缘分析。

此外,TDS 引入了智能化工具,如智能诊断和 Text2SQL,帮助用户快速定位问题、生成 SQL 查询,降低了数据开发和查询的技术门槛。

TDS 平台的建设大幅提升了数据开发效率和数据质量,是百度 MEG 新一代大数据生态的关键支撑。

01 百度 MEG 数据中台解决方案

1.1 背景与问题

百度 MEG 上一代大数据产品存在平台多、质量参差不齐和易用性差的问题。这些问题导致开发人员面临较高的研发依赖、开发效率低下和高昂的学习成本;业务部门则感知需求支持迟缓、数据产出延迟及数据质量低的问题。

1.2 图灵 3.0 生态系统概述

为了解决上述问题,我们开发了新一代大数据生态产品——“图灵 3.0”。

图灵 3.0 旨在解决旧有大数据产品使用分散且技术相对落后的问题。

图灵 3.0 是一个覆盖数据全生命周期的强大生态系统,支持全链路的数据操作,包括数据计算引擎、数据开发和数据分析三个核心部分:

  1. TDE(Turing Data Engine):图灵生态的计算引擎,包含 Spark 计算引擎和 ClickHouse。

  2. TDS(Turing Data Studio):一站式数据开发治理平台。

  3. TDA(Turing Data Analysis):新一代可视化 BI 产品。



这篇文章将全面的介绍数据开发治理平台-TDS,后续都简称 TDS。

02 TDS 平台整体架构介绍

TDS 平台是图灵 3.0 生态中的关键组件,专注于数据开发治理。

它基于高效执行能力的 TDE 引擎进行数据加工,并将处理后的数据提供给可视化 BI 产品 TDA 进行查询与分析,同时也服务于核心数据报表平台,支持核心数据展示和高级业务分析。

TDS 还与公司的数据安全平台无缝对接,确保数据流通和权限合规。

2.1 TDS 平台功能模块

TDS 平台主要分为四大功能模块,每个模块在数据开发和治理中发挥重要作用:

  • 数据开发:支持数据加工任务的创建、管理和实例查看。具备依赖检测、数据计算和数据导入任务创建等功能。

  • 数仓管理:负责数仓表、CK 表的建设和管理,并与数据安全平台对接,实现权限管理。

  • 监控运维:提供任务延迟和失败报警配置,数据血缘查询以及任务/算子实例统计等运维功能。

  • 资源管理:管理开发组的接入,绑定存储资源和计算队列,并统一管理数据源。

2.2 TDS 平台架构层次

TDS 平台的架构分为多个层次,从基础设施到用户功能,每一层都具有重要的作用:

  • 基础设施层:包括 EMR(Elastic MapReduce)、AFS(Advanced File System)、ECI(Elastic Container Instance)等基础设施,提供了支持 TDS 平台运行的基础服务。

  • 引擎层:基于 TDE(Turing Data Engine),包括 TDE-Spark、TDE-BBS 和 TDE-CK,为大数据加工过程提供高效的执行能力。

  • 元数据服务层:提供统一的元数据管理服务,任务提交鉴权、SQL 解析等能力。

  • 调度层:由 TDS 平台调度层触发任务执行。调度层使用 scheduler 进行任务编排,通过 TM-MQ 实现任务的统一分发,而部署在 ECI 容器中的 executor 负责任务的实际执行。

  • 算子层:用户可见的算子层,提供了丰富的算子能力,允许用户通过算子组合配置任务。

  • 应用层:提供任务开发、任务运维、数仓管理、任务监控和任务报警等功能,直接面向用户,支持数据开发和治理的各项需求。



03 资源管理

TDS 的资源管理模块帮助用户高效地管理开发组、存储、队列等资源,并实现资源的集中管理和监控。

3.1 前端配置层

前端配置层为用户提供了友好的界面和交互方式,使其能够直观地操作和管理各种资源。主要功能包括:

  • 资源操作:用户可以通过前端配置层创建、编辑和删除开发组、存储和队列等资源。

  • 状态监控:提供资源状态和性能的监控功能,帮助用户及时了解资源的运行情况。

  • 资源管理:允许用户执行各种资源管理任务,并查看资源的详细信息和状态。

这一层使得资源管理变得简单直观,降低了操作难度和出错风险。

3.2 后端资源管理模块

后端资源管理模块负责处理和存储资源的元数据信息,确保系统的稳定性和资源的高效管理。主要功能包括:

  • 元信息管理:管理开发组、存储和队列等资源的定义、配置和状态信息,并将这些信息存储在底层元数据库中,以支持后续查询、分析。

  • 集中管理:将开发组和队列注册托管到公司级计算资源管理平台进行集中管理,实现资源的高效利用和监控,提高管理效率。

3.3 数据源管理

在数据源管理方面,用户可以构建多种类型的数据源配置,包括 AFS 路径、UGI、FTP、DRDS、Doris 等。此功能具有以下优势:

  • 配置选择:用户可以通过下拉选择已配置的数据源,减少人工输入错误的风险。

  • 环境区分:支持在一个数据源下区分测试和开发环境,避免测试数据误用到生产环境中,提高数据管理的准确性。

  • **提升安全性:**用户在使用数据源配置时,只是选择了对应的数据源标识符,无需配置具体的密码,可防止重要密码的泄露。



04 数据开发

TDS 平台提供了一整套规范化的数据开发流程和可视化的任务编辑,帮助用户高效地进行数据开发和运维。

4.1 标准开发流程

为了确保数据开发的规范性和一致性,TDS 平台定义了完整的数据开发标准流程,如下图所示:



1.任务开发 &测试

  • 开发任务:用户创建或修改开发任务,每次编辑保存之后 TDS 会生成一个任务版本。

  • 任务调试:编辑完开发任务后,支持对任务进行调试。

  • 任务试例行:开发测试中的任务,默认例行 3 天,之后会自动关闭。

  • 数据校验:支持对线上数据和测试数据进行数据校验,并对数据结果进行对比展示 diff。

  • 测试用例:此功能目前在规划中,用户可以为每个任务配置若干测试用例,修改任务后,自动执行测试用例,检查配置是否有问题。

2.任务上线

  • 发起上线单:用户选择开发任务的一个版本发起上线单,根据不同任务类型走不同的审批流程。

  • 版本推送:任务审批流程完成后,用户可以将上线单中的版本推送到上线。

  • 任务回滚:每个上线单关联了任务的版本,TDS 平台提供回滚功能,允许用户在需要时回滚任务,并生成新的上线单,重新走审批流程。

  • 版本对比:用户可以查看上线单版本和线上版本的配置 diff。

3.任务运维

  • 线上任务例行与回溯:用户可以对线上任务进行数据回溯和例行操作,但不允许直接修改任务内容。任何任务内容的修改都需要重新发起上线流程。

4.2 可视化任务开发

4.2.1 任务编辑

在 TDS 平台中,任务由多个算子(最小的任务执行单位)组成。这些算子通过单向连线确定依赖关系,形成无环的 DAG(有向无环图)。根据不同的使用场景,算子被分为以下三类:

  • 依赖检测算子:对任务所依赖的上游数据源(如 hive 表、ck 表、AFS 文件、任务等)进行依赖检测。

  • 数据计算算子:通过 SQL、Python、Scala、Java 或脚本对 AFS 文件、数仓表等进行数据加工处理,并将处理结果输出到数据表或 AFS 文件。

  • 数据导入算子:将数据源或结果数据导入到指定的数仓或数据源。

一个典型的任务结构如图所示:



4.3 任务调试

数据 RD 开发 TDS 任务时需对编写的任务(SQL、Python、Scala 代码片段)进行正确性校验和调试,同时需要对任务校验查询结果是否符合预期。

TDS 提供了任务调试能力,可对 SQL、Python、Scala 代码进行在线调试,同时支持调试结果查看和结果下载。

在我们底层引擎的加速下,可做到分钟级的调试。




TDS 平台 SQL 调试能力各部分功能说明:

  • 数据计算算子:

  • 任务配置:配置调试的 SQL、Python、Scala 代码片段

  • 队列配置:配置调试使用的计算队列

  • 临时表 &UDF 配置

  • 结果输出配置:配置调试任务输出结果的行和列设置

  • 引擎配置:配置调试使用的计算引擎

  • 调试服务:

  • 任务提交:对用户的调试代码进行打包并提交 Saprk 任务

  • 任务轮询:不断轮询调试任务的运行状态

  • 任务列表:记录每一次生成的调试任务

  • 任务结果:获取调试任务的结果

  • 任务日志:拉取调试过程中生成的日志文件,方便定位错误信息

  • 结果预览:将获取的任务产出数据根据结果输出配置进行适配,展示给用户

4.4 数据血缘

随着业务的发展,数据加工任务和数仓表的数量快速增长,任务与任务之间,表与表之间的关系变得越来越复杂,难以维护。

我们建设了数据血缘模块,支持任务与任务之间、任务与表之间、表与表之间、文件与表之间等的血缘关系。

基于数据血缘,可支持用户如下场景的需求:

场景 1:数据运维

  1. 日常指标、数仓运维,通过数据血缘查看数据上下游依赖。

场景 2:问题排查

发现报表中指标数据异常,排查异常原因,排查步骤:

  1. 查看数仓表字段的血缘关系,找到上游依赖数仓表,以及数仓表对应任务依次进行排查

  2. 问题修复后,从问题发生的数仓表任务开始依次回溯下游数据

场景 3:应用与生产打通,可快速联系数据负责人

  • 报表指标异常时,用户可根据血缘关系快速找到数据表负责人,快速联系数据表负责人进行数据确认和修复。

场景 4:统计分析

  • 基于数据血缘、任务血缘分析数据影响范围,评估数据价值。

场景 5:计算资源使用分析

  • 某个集群或者队列计算资源消耗大,可查看使用该队列的算子,并通过数据血缘查看下游产出的数据。

TDS 平台支持多种类型的数据血缘:**数仓表-数仓表、数仓表字段-数仓表字段、算子-算子、算子-数仓表。



4.5 监控报警

TDS 的数据任务涉及到众多业务线的基础数据产出,当这些任务出现异常时需要及时报警,TDS 平台建立了一套完整的监控报警系统,当任务运行失败或出现异常时,进行及时的报警通告。

主要支持以下几种场景的监控报警:

  • 运行失败

  • 首次失败即报警:一旦任务执行过程中出现失败,系统会立即触发报警,通知相关人员。

  • 最终执行失败报警:任务多次重试最终失败后,才会触发报警,通知相关人员。

  • 运行超时

  • 当前时间 – 开始运行时间 > 配置的超时时间

  • 当前时间 – 基准时间 > 配置的超时时间 (为适配非天级任务的特殊场景需求,支持从实例基准时间开始计算运行时长)

  • 打破 SLA

  • 当前时间 > 任务最晚完成时间 &任务未结束



同时支持多种多样的通知方式(电话、短信、邮件、IM 工具等),根据报警等级的不同,各种方式可以进行任意组合叠加。

05 任务调度介绍

5.1 调度系统设计

任务调度作为数据开发平台的基本能力,需具备高效稳定的任务调度能力,且随着任务的上涨需具备快速的横向扩张能力。

在功能支持上,结合百度内部的业务特点,还需支持 DAG 任务调度,上游执行完成后立即触发下游执行。

结合百度内部生态以及任务调度特点,我们建设了如下的任务调度系统:


整体上,分为了 Scheduler 调度器和 Executor 执行器两个模块,中间通过消息队列进行任务的分发和任务状态的流转,使用 DRDS 进行任务和调度实例的元数据存储。

5.1.1 Scheduler 模板

Scheduler 模块主要负责任务的管理,以及任务的编排调度,同时提供 API 给前端响应用户在 UI 上对任务的操作。

Scheduler 模块有如下 3 个核心线程:

  1. timer 线程:任务定期触发线程,定期从调度表中读取需要触发的任务进行触发操作。如果任务需要并发控制,则将触发消息发送给并发控制线程;否则,直接调起任务执行。

  2. concurrent 并发控制线程:任务并发控制线程,定期对任务进行并发检测。如果任务有剩余执行 quota,则调起任务执行;否则,等待并发 quota。如果任务执行完成,释放并发 quota。

  3. worker 线程:任务调度线程,主要负责任务状态的流转推进,从消息队列获取任务状态流转消息,进行相应处理,推送下一步执行消息到消息队列。

5.1.2 Queue 消息列队

消息队列负责对 Scheduler 和 Executor 之间的消息进行传递,消息队列选型为百度内部自研消息队列 TM。

该消息队列有两个特点:

  1. 消息只能被唯一消费者消费,这样可以确保任务同一时间只有一个执行器执行,避免重复执行。

  2. 消息消费有过期时间,任务执行器在执行任务时会定期刷新消息消费过期时间,消息到达消费过期时间之后,消息可被别的执行器消费,避免执行器宕机之后,任务执行卡住问题。

5.1.3 Executor 模板

Executor 模块负责具体任务的执行,部署在 ECI(弹性容器实例)上,利用 ECI 的弹性扩容机制,在任务量突增时,可以方便的进行横向扩容。

根据执行的复杂度和资源消耗,我们也对 Executor 划分了不同的资源池。

5.2 DAG 构建



在 DAG 图存储上,我们采用了邻接表的方式来进行存储,元数据里面存储了父节点 ID 和子节点 ID 的关系。

在用户配置的 DAG 关系的基础上,添加了一个虚拟的开始节点和一个虚拟的结束节点,确保我们每个任务的 DAG 图有唯一的入口和出口。

基于这样的设计,我们的任务总是从开始节点开始执行,在结束节点执行完成之后,整个任务视为执行完成。

每个节点在执行完成之后,才会触发下游节点的执行。

下游节点在执行之前会先检测上游节点是否都执行成功,如果有上游未执行成功,则等待下次触发。

06 数仓管理

数仓管理模块是 TDS 数据开发平台的核心组成部分,旨在优化和提升整个数据仓库的效能。

该模块涵盖了元数据管理、表操作审批、统计数据以及权限管理等关键功能,为用户提供全面而强大的数仓管理能力。



6.1 表 shema 管理

TDS 表 schema 管理覆盖了数据表的完整生命周期,在表生命周期中,有几个关键的操作需要清晰定义,以确保数据的完整性、安全性和高效性。

TDS 表的生命周期设计如图



  • 新建表:创建符合用户需求的新表,并确保表结构的准确性和一致性,并将表归属到业务线和开发组下进行统一管理。

  • 修改表:对已有表进行结构调整或修改,以满足新的业务需求。

  • 交接表:当用户不再负责某个表的管理时,将表的所有权和管理责任交接给其他用户。

  • 下线表:下线表并删除其所有相关数据,确保数据的彻底清除。

6.2 操作审批

涉及到表的生命周期内的各种操作都需要进行审批,审批流程完成后自动执行表操作命令。

审批流程中根据不同的操作对于申请发起人进行了限制,如删除表只允许表所属开发组的管理员和表的创建人发起操作。

审批人一般也设置为开发组和业务线的数据 BP 进行审批。

6.3 权限管理

用户在 TDS 建完表之后,我们会将表的元数据信息同步到数据安全管理平台,我们使用数据安全管理平台来对表权限进行统一合规性管理。

用户在 TDS 平台也可查看自己对某个表的权限信息,包括表级别和字段级别的权限。

在将表发布之后,用户也可对表发起权限申请,根据不同的字段密级有不同的权限申请流程,流程通过之后会自动开通相应权限。

6.4 表数据统计

TDS 提供了丰富多样的表相关的数据统计,例如:

  • 表的使用次数、和使用用户等数据的统计趋势图

  • 表集群总存储空间和每日存储数据统计

  • 分区名称、分区大小、分区到位时间等分区信息

07 智能化助力数据开发

7.1 智能诊断

由于业务人员对大数据计算引擎知识了解较少,在进行数据分析或者数据开发时,一旦出现 SQL 写错或者任务失败,经常面临着数据复杂度高、原因定位难等问题。传统的人工诊断方式需要具备大量专业的计算引擎相关领域知识的引擎开发人员进行排查,人工排查效率低,无法满足大量任务排查的需求。

智能诊断通过失败任务日志和错误 SQL 的深入分析以及利用 LLM 的能力构建了数据中台垂直领域的智能诊断模型。该模型能够及时监控数据中台中用户任务的运行状态,自动分析日志和错误 SQL,快速定位问题并提供详细的诊断报告和解决方案建议,从而快速响应以及帮助业务同学解决问题。

智能诊断模型还通过用户友好的界面设计,使得即便是缺乏深厚技术背景的业务人员也能轻松上手。模型提供的直观诊断报告,用通俗易懂的语言解释复杂的技术问题,大大降低了业务人员的学习及使用成本。



7.2 Text2Sql

在业务发展阶段,数据分析和查询是业务决策的重要基础。然而,很多业务人员缺乏编写复杂 SQL 能力,导致业务人员学习成本高,同时依赖数据团队排期解决数据查询问题。自然语言生成 SQL 可以帮助用户在不熟悉 SQL 的情况下完成数据查询,降低数据查询门槛,提升沟通效率,帮助业务团队更便捷地进行业务分析和决策。

基于大模型能力,我们开发了 Text2Sql 模块,根据用户的查询描述,自动生成查询 SQL。

我们的 Text2Sql 一共经历了两个阶段。

第一阶段是用户指定表生成 SQL,基于用户选定的表以及查询描述,通过 TDS 平台数仓管理获取表的元数据信息,结合 prompt 调用千帆大模型生成 SQL。



这种方式可以满足一些简单的问答场景实现 Text2SQL。然而,在更多业务场景中,遇到一些问题:

  1. 业务分析场景比较复杂,仅通过 LLM 生成聚合类指标、复杂维度往往不能准确描述,很难能满足业务需求

  2. 限于用户在 TDS 数仓建表,字段描述、字段示例描述不清晰会产生大模型幻觉问题。

  3. 大模型生成的指标、维度,终端用户不知道字段来源、字段规则,从而也会导致难以确认 SQL 是否置信

  4. 数据表多且涉及到表关联,业务同学对表不熟悉,难选择具体的表

由于以上问题,希望实现更加智能化的通过用户一句话生成 SQL。

为实现这一目标,我们启动了第二阶段的开发,采用 Post-pretrain + SFT 对模型进行微调,结合 BI 分析工具的一些典型的打点日志,将用户查询的指标、维度、以及对应的筛选条件等整合后构建数据集在千帆平台进行大模型训练。通过采用上下文优化(Context Optimization)方式,实现了 Text2SQL 功能。生成效果如图所示:



08 总结与展望

TDS 平台,作为图灵 3.0 生态系统中的核心组件,凭借其高效的架构设计和全面的功能模块,在数据开发和治理领域展现了强大的能力。通过整合 TDE 计算引擎、数仓管理、监控运维和资源管理等功能模块,TDS 平台不仅提升了数据开发的效率,还优化了数据质量和运维管理。其标准化的数据开发流程、灵活的任务调度系统以及智能化的功能(如 Text2SQL)为用户提供了更加便捷和高效的数据处理体验。

目前 TDS 平台已覆盖百度 MEG 所有业务线的基础数据和核心数据的建设,目前拥有任务数 3w+,每天为各业务提供 40w+的任务实例调度。

展望未来,TDS 平台有望在以下几个方面进一步发展和完善:

  1. 智能化助力数据开发:随着大模型能力的不断强化,TDS 平台将不断增强其智能诊断和自动化功能。进一步优化 Text2SQL 模块,提高自然语言生成 SQL 的准确性和适用范围,降低业务人员对复杂查询的技术门槛。

  2. 数据整合与互操作性:TDS 平台将更加注重数据的整合与互操作性,支持更多数据源和格式的无缝对接,进一步提升数据治理和分析的能力。

  3. 扩展性与灵活性:随着业务需求的不断变化,TDS 平台将在任务调度和资源管理方面加强扩展性和灵活性,支持更大规模的任务和数据处理,提高系统的整体性能和响应速度。

  4. 安全性与合规性:未来将加强对数据安全和合规性的管理,尤其是在敏感数据处理和隐私保护方面,进一步提升平台的安全防护能力,确保数据处理的合规性。

总体而言,TDS 平台将继续发挥其在数据开发治理中的重要作用,通过不断的技术创新和功能完善,进一步推动业务的数据管理能力提升,为业务决策提供更有力的数据支持。

———— END————

推荐阅读

键盘也能用上大模型?文心一言内置于罗技最新品

大模型在研发数据中台的应用实践

飞桨框架3.0核心升级:动静统一自动并行,轻松开发大模型

百度搜索的RLHF性能优化实践

基于飞桨框架实现PCA的人脸识别算法

用户头像

百度Geek说

关注

百度官方技术账号 2021-01-22 加入

关注我们,带你了解更多百度技术干货。

评论

发布
暂无评论
百度MEG数据开发治理平台-TDS_数据治理_百度Geek说_InfoQ写作社区