为Apache Spark对MinIO与AWS S3进行基准测试

Benchmarking MinIO vs. AWS S3 for Apache Spark

Apache Spark 是一个分布式计算框架。它提供了一种最佳机制,用于将数据分布到集群中的多台机器上并在其上执行计算。

Spark 通过构建称为 RDD(弹性分布式数据集)的数据结构来实现这一点。RDD 允许将数据分解成不同的块,并独立地处理它们。然后可以将各个块组合起来以创建最终结果。当数据提供给 Spark 时,它会自动从中构建这些数据结构。这允许程序员编写应用程序逻辑并毫不费力地利用 Spark 的并行性优势。

当 Spark 将 RDD 分割成独立的块时,每个块都与其他每个块并行加载、处理和修改。这会导致大量连接到存储后端,随后是网络上传输的数据量也相应增加。底层存储的性能对于充分利用 Spark 提供的优势至关重要。

本文讨论了 MinIO 作为 Spark 存储后端的性能,并在来自基准工作负载(TPC-H™ 基准测试)的巨大压力下进行了评估。

TPC-H™ 基准测试

当数据施加了模式时,提供给 Spark 的数据可以实现最佳并行化。为了测试底层存储的极限,我们选择了一个具有一致模式的基准测试。TPC-H 基准测试基于 8 个相互关联的数据集。数据集的大小基于扩展因子。我们将扩展因子设置为 1000,这生成了 1TB 的数据集。

1TB 的数据集已生成,并以 ORC(优化行列)格式格式化,并存储在 MinIO 存储桶中。转换为这种格式会自动压缩数据,从而将数据大小缩减到 273 GB。

Spark MinIO 架构

数据集的庞大规模需要一个大型集群才能有效地处理这种规模。我们选择在 AWS 上使用 8 个高性能、计算优化实例 (c5n.18xlarge) 来运行 Spark。我们选择 8 个高性能、存储优化实例 (13en.24xlarge) 用于 MinIO。这些实例都连接到 100 Gbe 网络链路。

下表详细说明了运行此架构的硬件。

Spark 设置

Spark 已针对充分利用尽可能多的 MinIO 连接进行了优化。这是通过设置以下参数实现的

此外,我们发现以下设置可以带来最佳查询性能

基准测试结果

下面显示了每个 22 个 TPC-H™ 查询所花费的时间

下面显示了一个总结上述结果的图表

将 MinIO 与 Amazon S3 进行比较

针对存储在 Amazon S3 中的数据运行了相同的基准测试,并使用相同的 Apache Spark 硬件。需要注意的是,MinIO 是强一致性的,而 Amazon S3 只是最终一致性的。性能基本相同,一些查询比 MinIO 慢,另一些则更快,总体而言有利于 MinIO。下面显示了一个总结查询时间图,比较了 Apache Spark 工作负载中 MinIO 和 S3 的查询时间。


我们在比较中发现,MinIO 在总体和大多数查询中都优于 AWS。更重要的是,两者都提供了以前被认为超出对象存储能力的性能水平。现在,对象存储的固有优势(可扩展性、弹性和成本)可以与私有云环境中大型、高性能、数据密集型工作负载的出色性能相结合。

如果您有任何问题,请通过 [email protected] 与我联系,或点击页面底部的技术请求表单。有关完整详细信息,您可以在此处找到论文