OPPO 案例 | Alluxio 在 Data&AI 湖仓一体的实践

分享嘉宾:
付庆午-OPPO 数据架构组大数据架构师
在 OPPO 的实际应用中,我们将自研的 Shuttle 与 Alluxio 完美结合,使得整个 Shuttle Service 的性能得到显著提升,基本上实现了性能翻倍的效果。通过这一优化,我们成功降低了约一半的系统压力,同时吞吐量也直接翻倍。这样的结合不仅解决了性能问题,更为 OPPO 的服务体系注入了新的活力。
完整文字版分享内容↓
分享主题:《Alluxio 在 Data&AI 湖仓一体的实践》
一、Data&AI 一体数据湖仓架构

上图是 OPPO 目前的整体架构,主要分为两部分:
1、Data
2、AI
OPPO 在数据领域主要专注于结构化数据,即通常使用 SQL 处理的数据。在 AI 领域,主要关注非结构化数据。为实现结构化和非结构化数据的统一管理,OPPO 建立了一个名为 Data and Catalog 的系统,通过这种 Catalog 元数据的形式进行管理。同时,这也是一个数据湖服务,其中上层数据接入层采用 Alluxio 分布式缓存。
为什么我们选择使用 Alluxio 呢?
因为 OPPO 国内机房规模庞大,计算节点上的内存闲置量相当可观。我们估算平均每天约有 1PB 的内存处于闲置状态,并且希望通过这种分布式内存管理系统使其充分利用。橙色部分代表非结构化数据的管理,我们的目标是通过数据湖服务,使非结构化数据能够像结构化数据一样方便管理,并为 AI 训练提供加速。
DAA-Catalog

DAA-Catalog,即 Data and AI Catalog,是我们团队在数据架构底层追求的目标,我们选择这个名字是因为 OPPO 致力于与业界最优秀的公司竞争。目前,我们认为在 Data&AI 领域,Databricks 是最杰出的公司之一。无论是技术性、理念的先进性还是商业模式,Databricks 都表现出色。
受到 Databricks 的 Unicatalog 启发,我们看到 Databricks 的 Service 数据和 AI 训练流程主要围绕 Unity Catalog 展开。因此,我们决定构建 DAA-Catalog,以追求在数据湖仓库领域与业界最佳公司竞争的目标。
具体而言,这一功能分为两个主要模块:
- Metastore(元数据存储):这一部分负责元数据的管理,底层基于 Iceberg 元数据管理。包括并发提交和生命周期管理。同时,我们使用 Down Service 进行管理,因为我们的数据首先会进入 Alluxio 的庞大内存缓存池,并实现每一条记录的实时插入和查询。
- Management(管理):这一部分是 DOM 服务,为什么选择 Down Service 呢?因为数据进入后首先存储在 Alluxio 的内存中,实现了秒级的实时性。整个流程中,数据进来后会自动通过 Catalog 下沉到 Iceberg,元数据基本上都在 Alluxio 中。
为什么我们要实现这样的秒级实时功能呢?
主要是因为我们之前使用 Iceberg 时发现一个严重问题,它基本上需要每 5 分钟做一次 Commit,每次 Commit 都会生成大量小文件,对 Flink 计算系统和 HDFS 的元数据都造成了很大的压力。同时,还需要手动清理和合并这些文件。通过 Alluxio 服务,数据可以直接进入内存,Down Service 也通过 Catalog 进行管理。整个流程中,数据进入后会自动下沉到 Iceberg,元数据基本上都在 Alluxio 中。
由于 OPPO 与 Alluxio 有许多合作,我们在 2.9 版本的基础上做了一些调整,性能得到了大幅提升。在数据湖上实现了流式文件的读写,每一条数据都可以像一个 commit 一样,而不需要整个文件进行 commit。
结构化数据的加速

随着大数据的发展,许多基础设施已经相当完善,解决了许多不同场景的问题。然而,我们的关注点是如何更有效地利用闲置资源和内存。因此,我们致力于从两个方面入手:一个是缓存加速,另一个是对热表和索引的优化。
我们提出了一个名为“Dynamic Cluster”的概念,它是一个动态聚合数据的功能,灵感来自于 Databricks 的一项技术。尽管内部也使用了 Hallway 曲线,但我们在其基础上实现了“the order”和“增量 the order”排序算法,将它们融合在一起形成了 Dynamic Cluster。这一创新可以在数据录入后动态地聚合数据以提升查询效率。与 Hallway 曲线相比,“the order”算法的效率更高,但 Hallway 曲线在实时变动方面的表现更为优越。这种融合为我们提供了更灵活、高效的查询和聚合数据的方式。
非结构化数据管理

上图展示了我们在非结构化数据领域的一些工作,主要涉及到 AI 领域。在 OPPO 内部,AI 训练一开始使用的工具相对较老旧,通常是通过脚本直接读取数据,或者将数据以裸的 txt 文件、裸的 image 文件形式存放在对象存储上。借助 Transfer 服务,我们能够将数据自动导入数据湖,并将打包好的图片数据切割成 update set 的格式。在 AI 领域,尤其是在处理图片领域,update set 是一个高效的数据集接口,它不仅兼容 web 数据集接口,还可以转换成 H5 格式。
我们的目标是通过对元数据的处理将非结构化数据管理变得像结构化数据一样便捷。在数据转换的过程中,将非结构化数据的元数据写入 Catalog 中。同时,我们与大模型结合,将元数据的一些信息写入向量数据库,以便更轻松地使用大模型或自然语言查询湖仓中的数据。这一整合工作的目标是提高对非结构化数据的管理效率,使得其更加符合结构化数据的管理方式。
非结构化数据 - 元数据管理示例

上图是 OPPO 非结构化数据管理的一个实例,实现可以像 SQL 一样去搜索文本、图片的位置。
DataPrompter

选择构建 DataPrompter 的初衷源自对更好地运用大模型的追求。OPPO 致力于将数据与大模型结合的领域,推出了一个名为 Data Chart 的产品,通过内部聊天软件,用户可以轻松查询所有数据。例如,用户可以方便地查询昨天手机的销量,或者比较与小米手机销量的差异,通过自然语言进行数据分析。
在产品构建过程中,每个领域的数据表需要专业的业务人员输入 Prompter。这对整个数据湖仓或产品的推广带来了挑战,因为每一张表的 Prompter 都需要花费相当长的时间。例如,想要输入财务表数据,需要详细填写表的字段、业务域含义、展开维表等专业且技巧性的信息。
我们的最终目标是使得数据进入湖仓后,大模型能够轻松理解上层数据。在数据入湖的过程中,业务需展示一些规定的信息,并结合我们在 Data Prompter 方面积累的经验,利用 HBO Service 提供的一些常用查询,最终生成一个使大模型容易理解的 Prompter 范本。这样的结合旨在让模型更好地理解业务数据,使湖仓与大模型的结合更为顺畅。
Alluxio 助力秒级实时入湖

Alluxio 助力秒级实时入湖,主要分为:
1、Real-data
2、Base-data
3、Dump Service
4、文件流式读写
二、Alluxio 在湖仓架构中的实践
Alluxio 与 Spark RSS 结合

我们最初选择将 Alluxio 与 Spark RSS 服务结合,通过自研的 Spark Shuttle Service 并以 Shuttle 的名义开源。起初,我们的底层基于分布式文件系统,但随后在性能方面遇到了一些问题,于是我们找到了 Alluxio。
Shuttle 与 Alluxio 的完美结合使得整个 Shuttle Service 的性能得到了显著提升,基本上实现了性能翻倍的效果。通过这一优化,我们成功降低了约一半的系统压力,同时吞吐量也直接翻倍。这次的结合不仅解决了性能问题,更为我们的服务体系注入了新的活力。

在 OPPO 的后续研发中,基于 Alluxio+Shuttle 的框架实现了更多创新。我们将 Shuttle 算子和广播算子都优化到内存数据层面,通过高效的内存数据交互,特别是在处理单点 Reduce 时,当数据倾斜的情况下,原本耗时长达 50 分钟的排序操作,迁移到新方案后,成功将处理时间降低到了 10 分钟以内。这一优化不仅大大提高了处理效率,也有效缓解了数据倾斜对系统性能的影响。

广播成果非常显著,特别是在 Spark 中,默认广播大小为 10M,因为所有的广播数据都必须在 Java 端存放,在经过 Java 序列化后容易发生膨胀,进而引发 OOM(Out of Memory)问题,这在线上环境中经常发生。
为了解决这个问题,我们目前将广播数据存放到 Alluxio 中。这样一来,几乎可以广播任意大小的数据,最大可达 10 个 G。这一创新在 OPPO 线上已经有多个案例成功实施,对提升效率产生了显著的影响。
三、Alluxio 在公有云/混合云上的应用实践

在 OPPO 的公有云大数据体系中,特别是在新加坡地区,我们主要采用 AWS 作为基础架构。在早期阶段,我们使用了 AWS 提供的弹性计算服务(EMR)。然而,近年来,行业整体经济形势不太乐观,许多企业都在追求降低成本和提高效率。面对这一趋势,我们在海外公有云领域提出了自研的解决方案,利用云上的弹性资源搭建一套新的架构。这一创新方案的核心是依赖于 Alluxio+Shuttle 的组合,为我们的大数据体系提供了关键的支持。

Alluxio+Shuttle 解决方案的显著优势在于,Alluxio 集群并非被 Shuttle 独占,它可以为其他服务提供支持,包括数据缓存和元数据缓存。在公有云中,我们深知 S3 上的 List 操作在提交时非常耗时,通过结合 Alluxio 和开源的 Magic commit、 Shuttle 的方案,我们取得了显著的降本效果,大约降低了计算成本的 80%。
在混合云环境中,我们为 AI 团队提供服务。由于数据湖底层有对象存储,我们在训练过程中利用了阿里云上的 GPU 卡,同时也结合了自建的 GPU 资源。由于专线带宽有限且成本较高,数据拷贝时需要一个有效的缓存层。最初,我们采用了存储团队提供的解决方案,但其扩展性和性能并不理想。引入 Alluxio 后,我们在多个场景中实现了数倍的 IO 加速,为数据处理提供了更高效的支持。
四、展望

OPPO 的集群规模在国内已经达到上万台,形成了相当庞大的规模。我们计划在未来深入挖掘内存资源,以更充分地利用内部的存储空间。团队内部同时拥有实时计算框架 Flink 和离线处理框架 Spark,这两者可以相互借鉴 Alluxio 的应用经验,实现 Alluxio 与数据湖的深度融合开发。
在大数据和机器学习结合的浪潮中,我们紧跟行业趋势。将数据架构从底层与人工智能(AI)深度结合,为 AI 提供优质的服务作为首要任务。这一融合不仅是技术上的进步,更是对未来发展的战略规划。
最后,我们将进一步挖掘 Alluxio 的优势,助力我们在公有云环境中降低成本。这不仅涉及技术上的优化,也包括对云计算资源的更有效管理,为公司的可持续发展提供坚实支持。
版权声明: 本文为 InfoQ 作者【Alluxio】的原创文章。
原文链接:【http://xie.infoq.cn/article/c35b800ab70feebdad1c9f775】。文章转载请联系作者。
评论