Jumia构建了一个下一代数据平台,采用以元数据驱动的规范框架 大数据博客

Jumia构建下一代数据平台的元数据驱动框架

关键要点 在这篇文章中,我们将探讨Jumia如何与AWS专业服务合作,现代化其数据平台,从传统的Hadoop解决方案迁移到基于AWS无服务器解决方案的架构。这一现代化过程解决了高维护成本、灵活性不足等一系列问题,建立了一个可重用、可扩展的元数据驱动规格框架。最终目标是推动数据处理的效率与安全性。

文章概要

Jumia是一家成立于2012年的技术公司,总部位于尼日利亚拉各斯,在14个非洲国家开展业务。Jumia的业务涵盖市场、物流和支付服务。本文将重点介绍Jumia与AWS合作的现代化数据平台之旅,它将数据架构从Hadoop迁移到无服务器架构,以应对高昂的维护成本和灵活性不足等挑战。

现代化解决方案概述

该现代化项目的核心理念是创建一种元数据驱动的框架,能够响应数据的不同处理阶段,包括数据编排、迁移、摄取、处理和维护。这一标准化方法促进了开发工作流程的简化,降低了由于采用各种不同方法而产生的错误风险。

在数据治理方面,虽然每个用例在其领域内保持一定自治,但在其上方有一个集中式治理模型,定义了对共享架构组件的访问控制。此外,实施过程中强调数据保护,确保所有服务都进行加密,并遵循最小权限原则,从而增强整体系统安全性。

以下图展示了所创建的框架设计。在该设计中,新的数据平台的负载按用例分类。每个用例需要为数据迁移至数据流编排的每个阶段创建一组YAML文件作为输入,而输出则是执行特定任务的有向无环图(DAG)。

![Overview](https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2024/12/12/archi- 删除)

接下来,我们将更详细地讨论每个阶段的目标、实施和经验。

数据编排

本阶段的目标是构建一个元数据驱动的框架,以便在整个现代化过程中编排数据流。该编排框架提供了一个强大且可扩展的解决方案,具有以下功能:动态创建DAGs、原生集成非AWS服务、根据过去执行创建依赖关系、每次执行时生成可访问的元数据等。因此,决定使用(Amazon MWAA),它通过Apache Airflow引擎提供这些功能。

以下是为进行数据处理而提供的元数据文件描述,该数据处理使用Spark在上进行:

yaml owner: # 用例所有者 dags: # 为该用例创建的DAG列表 - name: # 用例名称 type: # DAG类型(可能是迁移、摄取、转换或维护) tags: # 标签列表 notification: # 定义DAG通知 on_success_callback: true on_failure_callback: true spark: # Spark作业信息 entrypoint: # Spark脚本 arguments: # Spark脚本所需参数 spark_submit_parameters: # Spark提交参数

所有框架的构建意图是为了提供可重用的艺术品,从而加速开发团队的工作并提高可靠性。这个框架为直接在AmazonMWAA中基于配置文件创建DAG对象提供了能力。

数据迁移

本阶段的目标是构建一个元数据驱动的框架,将数据从HDFS迁移到使用Apache Iceberg存储格式的AmazonS3,该过程要尽量减少操作开销,同时在高峰时段提供可扩展性,并确保数据的完整性和机密性。

以下图示显示了该架构。

![Migration](https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2024/12/12/archi- 删除)

在这一阶段,构建在PySpark上的元数据驱动框架接收配置文件作为输入,以便执行一些在Amazon EMRServerless作业中的迁移任务。这项工作使用PySpark框架作为脚本位置,然后使用之前描述的编排框架创建一个迁移DAG,该DAG运行以下任务:

  1. 第一个任务在中以Iceberg格式创建DDL。
  2. 在创建了表后,第二个任务使用将HDFS数据转移到位于Amazon S3的降落桶中,以同步客户数据。
  3. 完成此过程后,第三个任务将数据从降落桶转换为Iceberg格式,然后移动至目标桶(原始、处理或分析)中,使用Amazon EMR Serverless作业中嵌入的另一选项完成。

要提高数据传输性能,建议将待传输文件的大小压缩到128–256 MB。因此,减少文件数量能加快迁移阶段的数据分析和完整性阶段。

数据摄取

本阶段的目标是实现另一个基于元数据的框架,以响应两种数据摄取模型。批处理模式负责从不同数据源(如Oracle或PostgreSQL)中提取数据,而微批处理模式则从Kafka集群中提取数据。

以下图示显示了批处理、微批处理和流处理的架构。

![Ingestion](https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2024/12/12/archi- 删除)

在此阶段,元数据驱动框架构建逻辑,以便从Kafka、数据库或外部服务中提取数据,并将其运行在部署在Amazon MWAA中的摄取DAG中。

对Kafka主题的数据摄取使用Spark结构化流处理。框架接收YAML格式的配置文件,指示读取哪些主题、要执行的提取过程、是以流方式还是微批方式读取,以及信息应保存到哪个目标表。

针对批处理摄取,实现了一个用PySpark编写的元数据驱动框架。同样,框架接收YAML格式的配置,包含要迁移的表及其目标。

在这种类型的迁移中,与摄取阶段和迁移阶段的数据同步至关重要,以防数据丢失或不必要的再处理。为此,实现了一个解决方案,将最后历史数据的时间戳(按表分类)保存到DynamoDB表中。两种类型的框架都被编程为在首次运行时使用这些数据。

数据处理

本阶段的目标是能够在对象存储文件系统中处理数据的更新和删除,因此Iceberg成为了本项目的重要解决方案,因其具有ACID能力。虽然所有阶段都使用Iceberg作为增量文件,但处理阶段广泛利用Iceberg的能力执行数据的增量处理,使用UPSERT在Iceberg中运行MERGEINTO命令。

以下图示显示了该架构。

![Processing](https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2024/12/12/archi- 删除)

该架构与摄取阶段相似,仅将数据源更改为Amazon S3。这种方法加快了交付阶段,并确保了生产就绪的解决方案。

默认情况下,Amazon EMRServerless将参数spark.dynamicAllocation.enabled设置为True。该选项根据工作负载动态调整应用程序中注册的执行器数量。这在处理不同类型工作负载时具有许多优势,但在使用Iceberg表时也带来考虑。例如,在向Iceberg表写入数据时,AmazonEMR Serverless应用程序可能使用大量执行器以加快任务速度。这可能导致超出AmazonS3限额,尤其是每个前缀的请求数量。因此,应用良好的数据分区实践非常重要。

另一重要方面是对象存储文件布局。默认情况下,Iceberg使用Hive存储布局,但可以设置为使用ObjectStoreLocationProvider。设置此属性后,每个文件生成一个确定性哈希,并直接在write.data.path后附加哈希。这可以显著减少基于对象前缀的节流请求,同时最大化与AmazonS3相关的I/O操作的吞吐量,因为写入的文件均匀分布在多个前缀中。

数据维护

在使用Iceberg等数据湖表格式时,进行常规维护任务以优化表的元数据文件管理至关重要,以防止大量不必要的文件堆积,并及时删除未使用的文件。本阶段的目标是构建另一个框架,能够在数据湖中的表上执行这些任务。

以下图示显示了该架构。

![Maintenance](https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2024/12/12/archi- 删除)

该框架与其他框架相似,接收一个配置文件(YAML文件),指示表及其维护任务和相应参数。它是基于PySpark构建的,可作为Amazon EMRServerless作业运行,并可以通过编排框架进行编排。

该框架支持以下维护任务:

  • 过期快照 - 快照可用于回滚操作以及时间旅行查询。然而,它们可能会随时间积累,从而导致性能下降。建议定期过期不再需要的快照。
  • 删除旧元数据文件 - 元数据文件的积累情况与快照类似。定期删除它们也很重要,尤其是在处理流式或微批操作的情况下。
  • 文件压缩 - 随着数据文件数量的增加,存储在清单文件中的元数据数量也随之增加,而小数据文件会导致查询效率降低。因为本解决方案采用了流式和微批应用程序写入Iceberg表,文件大小通常较小。因此,压缩文件的方法迫在眉睫,以提升整体性能。
  • 硬删除数据 - 要求能够对超过特定时间的数据进行硬删除。这意味着删除快照和元数据文件。

维护任务的调度频率根据用例和特定任务的不同而有所不同。因此,这些任务的调度信息在具体用例的每个YAML文件中定义。

在实现该框架时,还没有关于Iceberg表的自动维护解决方案。在2024年AWS re:Invent大会上,功能已发布,旨在自动化Iceberg表的维护工作,包括文件压缩、快照管理及未引用文件的删除。

结论

构建一个基于标准化框架和元数据驱动的解决方案,不仅提升了对数据迁移、摄取、编排等各个阶段的可视化和控制,还显著加快了实施和开发流程。此外,通过使用AmazonEMR Serverless和DynamoDB等服务,能够享受无服务器架构的所有优势,包括可扩展性、简单性、灵活集成、提高可靠性和成本效益。

借助这一架构,Jumia成功将数据湖的成本降低了50%。此外,通过这一方法,数据与DevOps团队能够通过创建元数据文件和SparkSQL文件,快速部署完整的基础设施与数据处理能力。这样一来,不仅缩短了生产周转时间,还降低了失败率。此外,提供了在AWS平台及外部存储层之间协作和治理数据集的能力。

依靠AWS构建我们的数据平台,不仅优化和降低了基础设施成本,还标准化了我们各数据团队的工作流,建立了一个更可靠的数据资产单一真实来源。这种转型提升了我们的效率和灵活性,使我们能够更快地获得洞察,从而增强了整体数据平台的价值。

– Hélder Russa,Jumia集团数据工程主管

立即通过AWS迈出简化数据迁移过程的第一步。


作者介绍

![RamonDíez](https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2024/12/13/Ramon- 删除) Ramón Díez 是AWS的高级客户交付架构师,他带领项目顺利进行,坚信技术能够为商业服务。

![PaulaMarenco](https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2024/12/13/Paula- 删除) Paula Marenco 是AWS的数据架构师,热衷于设计分析解决方案,通过清晰和可操作的洞察,帮客户应对复杂的数据过程,增强决策效力。

![HélderRussa](https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2024/12/13/Helder- 删除) Hélder Russa 是Jumia集团数据工程负责人,参与制定战略,设计和实现多个支持整体决策过程及运营特性、数据科学项目和实时分析的Jumia数据平台。

![PedroGonçalves](https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2024/12/13/Pedro- 删除) Pedro Gonçalves 是Jumia集团的首席数据工程师,负责数据架构的设计与监督,重视AWS平台和数据湖技术的应用,以确保健壮与灵活的数据解决方案及分析能力。

Leave a Reply

Required fields are marked *