p } ?>

Amazon EMR 71 运行时针对 Apache Spark 和 Iceberg 的性能比 A

Amazon EMR 71 加速 Apache Spark 和 Iceberg 工作负载的性能

关键要点

在这篇文章中,我们探讨了 Amazon EMR 71 运行时如何使 Apache Spark 和 Iceberg 相比于开放源代码的 Spark 351 和 Iceberg 152 提高了 27 倍的性能。我们的基准测试显示,EMR 能够将 TPCDS 3 TB 的工作负载执行时间从 1548 小时缩短到 0564 小时,同时实现了 22 倍的成本效益提升。

引言

在本文中,我们将探讨使用 Amazon EMR 运行时与在 Iceberg 表上运行开放源代码的 Spark 351 进行相比所带来的性能优势。Iceberg 是一种流行的开源高性能格式,适用于大型分析表。我们的测试结果表明,Amazon EMR 能够以 27 倍的速度运行 TPCDS 3 TB 的工作负载,运行时间从 1548 小时降至 0564 小时。此外,成本效率提升了 22 倍,总成本从 1609 美元降至 723 美元,这在数据处理任务中表现出了显著的优势。

Amazon EMR 的 Spark 运行时 提供了高性能的运行环境,并与开源 Spark 和 Iceberg 表格式保持 100 的 API 兼容性。在 使用 Amazon EMR 运行 Apache Spark 351 工作负载获得 45 倍的速度提升 中,我们详细介绍了一些优化措施,显示出与开放源代码的 Spark 351 的运行时提升为 45 倍,价格性能比提高了 28 倍。尽管如此,许多优化措施是针对 DataSource V1 的,而 Iceberg 使用的是 Spark DataSource V2。已经认识到这一点后,我们专注于将一些现有的 EMR Spark 运行时优化迁移到 DataSource V2,并引入 Iceberg 特定的增强功能。这些改进基于查询规划的 Spark 运行时增强、物理计划运算符改进以及与 Amazon Simple Storage Service (Amazon S3) 和 Java 运行时的优化。自 2023 年 Amazon EMR 615 发布以来,我们增添了八项新优化,这些优化在 Amazon EMR 71 中默认启用。以下是一些改善措施:

优化 DataSource V2 的 Spark:在非分区列上进行动态过滤删除冗余的广播哈希连接部分哈希聚合推送基于布隆过滤器的连接Iceberg 特定优化:数据预取支持基于文件大小估算

Amazon EMR 在 EC2 上、Amazon EMR 无服务器版本、Amazon EMR 在 Amazon EKS 上 和 Amazon EMR 在 AWS Outposts 上 都使用了优化后的运行时。有关更多详细信息,请参阅 在 Amazon EMR 中处理 Apache Iceberg 和 优化 Apache Iceberg 工作负载的最佳实践。

Amazon EMR 71 与开放源代码 Spark 351 和 Iceberg 152 的基准结果

为了评估 Spark 引擎在 Iceberg 表格式下的性能,我们使用 3 TB TPCDS 数据集,版本 213 进行了基准测试。EMR Spark 和 Iceberg 的基准测试在 Amazon EMR 71 集群上使用 Spark 350 和 Iceberg 143amzn0 版本进行,而开放源代码的 Spark 351 和 Iceberg 152 则在专用的 EC2 集群上运行。

银河加速器下载苹果ios

关于设置说明和技术细节,可以在我们的 GitHub 仓库 中找到。为了减少外部目录,如 AWS Glue 和 Hive 的影响,我们为 Iceberg 表使用了 Hadoop 目录。该目录使用底层的文件系统,特别是 Amazon S3 作为目录。我们可以通过配置属性 sparksqlcatalogltcatalognamegttype 来定义此设置。事实表使用日期列的默认分区,分区数量在 200 到 2100 之间。对于这些表,没有使用预计算的统计信息。

我们在三个连续轮次中运行了总共 104 个 SparkSQL 查询,取每轮的每个查询的平均运行时间进行比较。在启用 Iceberg 的 Amazon EMR 71 上,三轮的平均运行时间为 056 小时,相比开放源代码的 Spark 351 和 Iceberg 152 提高了 27 倍。以下图表展示了总运行时间以秒为单位。

以下表格总结了各项指标。

指标Amazon EMR 71 on EC2开放源代码 Spark 351 和 Iceberg 152平均运行时间秒203317557519查询几何平均值秒10131532034651成本7231609

后续部分将详细讨论成本估算。

以下图表显示了 Amazon EMR 71 相对于开放源代码 Spark 351 和 Iceberg 152 的每个查询性能提升。速度提升的程度因查询而异,从 q93 的 96 倍到 q34 的 104 倍,Amazon EMR 的表现超过了使用 Iceberg 表的开放源代码 Spark。

成本比较

我们的基准测试提供了总运行时间和几何平均数据,以评估 Spark 和 Iceberg 在复杂的现实场景下的性能。为了获得更多见解,我们还分析了成本方面。我们的成本估算公式考虑了 EC2 按需实例、Amazon Elastic Block Store (Amazon EBS) 和 Amazon EMR 开销。

Amazon EC2 成本包括 SSD 成本= 实例数量 r5d4xlarge 小时费率 作业运行时间小时4xlarge 小时费率 = 每小时 1152Amazon EBS 根卷成本 = 实例数量 Amazon EBS 每 GB 每小时费率 根 EBS 卷大小 作业运行时间小时Amazon EMR 成本 = 实例数量 r5d4xlarge Amazon EMR 成本 作业运行时间小时4xlarge Amazon EMR 成本 = 每小时 027总成本 = Amazon EC2 成本 根 Amazon EBS 成本 Amazon EMR 成本

计算结果显示,Amazon EMR 71 在运行基准作业时,相对于开放源代码的 Spark 351 和 Iceberg 152 实现了 22 倍的成本效益。

指标Amazon EMR 71开放源代码 Spark 351 和 Iceberg 152运行时间小时05641548EC2 实例数量99Amazon EBS 大小20GB20GBAmazon EC2 成本5851605Amazon EBS 成本001004Amazon EMR 成本1370总成本7231609成本节省Amazon EMR 71 提高了 22 倍基线

除了以上讨论的基于时间的指标外,来自 Spark 事件日志的数据表明,Amazon EMR 71 从 Amazon S3 扫描的数据量约为开放源代码版本的 34 倍,记录数量减少了 41 倍。这一数据扫描减少直接贡献了 Amazon EMR 工作负载的成本节省。

在 Iceberg 表上运行开放源代码 Spark 基准测试

我们使用了单独的 EC2 集群,每个集群配备了九个 r5d4xlarge 实例,分别测试开放源代码的 Spark 351 和 Iceberg 152 以及 Amazon EMR 71。主节点配备了 16 个虚拟 CPU 和 128 GB 内存,八个工作节点一起配有 128 个虚拟 CPU 和 1024 GB 内存。我们使用 Amazon EMR 的默认设置进行测试,以展示典型用户体验,最小调整 Spark 和 Iceberg 的设置以保持平衡比较。

Amazon EMR 71 运行时针对 Apache Spark 和 Iceberg 的性能比 A

以下表格总结了主节点和八个工作节点的 Amazon EC2 配置。

EC2 实例虚拟 CPU内存 (GiB)实例存储 (GB)EBS 根卷 (GB)r5d4xlarge161282 x 300 NVMe SSD20 GB

前提条件

运行基准测试需要以下前提条件:

根据 emrsparkbenchmark GitHub 仓库 中的说明,在 S3 存储桶和本地计算机上设置 TPCDS 源数据。按照 构建 sparkbenchmarkassembly 应用程序的步骤 中的步骤构建基准应用程序,并将基准应用程序复制到您的 S3 存储桶。或者,可以将 sparkbenchmarkassembly351jar 复制到您的 S3 存储桶中。从 TPCDS 源数据创建 Iceberg 表。请遵循 GitHub 中的说明 使用 Hadoop 目录创建 Iceberg 表。例如,以下代码使用启用 Iceberg 的 EMR 71 集群 创建表:

bashaws emr addsteps clusterid ltclusteridgt steps Type=SparkName=Create Iceberg TablesArgs=[classcomamazonawsekstpcdsCreateIcebergTablesconfsparksqlextensions=orgapacheicebergsparkextensionsIcebergSparkSessionExtensionsconfsparksqlcataloghadoopcatalog=orgapacheicebergsparkSparkCatalogconfsparksqlcataloghadoopcatalogtype=hadoopconfsparksqlcataloghadoopcatalogwarehouse=s3//ltbucketgt/ltwarehousepathgt/confsparksqlcataloghadoopcatalogioimpl=orgapacheicebergawss3S3FileIOs3//ltbucketgt/ltjarlocationgt/sparkbenchmarkassembly351jars3//blogpostsparkoneksuseast1/blog/BLOGTPCDSTEST3Tpartitioned//home/hadoop/tpcdskit/toolsparquet3000trueltdatabasenamegttruetrue]ActionOnFailure=CONTINUE region ltAWS regiongt

请注意 Hadoop 目录仓库位置和数据库名称。我们使用相同的表来运行 Amazon EMR 71 和开放源代码 Spark 及 Iceberg 的基准测试。

这款基准应用程序是基于 tpcdsv213iceberg 分支构建的。如果您在构建新的基准应用程序,请在从 GitHub 仓库下载源代码后切换到正确的分支。

创建并配置 Amazon EC2 上的 YARN 集群

为了比较 Amazon EMR 在 Amazon EC2 上与开放源代码 Spark 在 Amazon EC2 上的 Iceberg 性能,请遵循 emrsparkbenchmark GitHub 仓库 中的说明,以使用 Flintrock 创建具有八个工作节点的开放源代码 Spark 集群。

基于本测试的集群选择,以下配置被使用:

yamlyarnsitexmlenableyarnsh

使用 Apache Spark 351 和 Iceberg 152 运行 TPCDS 基准测试

按照以下步骤运行 TPCDS 基准测试:

通过 flintrock login CLUSTERNAME 登录到开放源代码集群的主节点。提交您的 Spark 作业:选择正确的 Iceberg 目录仓库位置和包含已创建 Iceberg 表的数据库。结果将生成在 s3//ltYOURS3BUCKETgt/benchmarkrun。您可以在 /media/ephemeral0/sparkrunlog 中跟踪进度。

bashsparksubmit master yarn deploymode client class comamazonawsekstpcdsBenchmarkSQL conf sparkdrivercores=4 conf sparkdrivermemory=10g conf sparkexecutorcores=16 conf sparkexecutormemory=100g conf sparkexecutorinstances=8 conf sparknetworktimeout=2000 conf sparkexecutorheartbeatInterval=300s conf sparkdynamicAllocationenabled=false conf sparkshuffleserviceenabled=false conf sparkhadoopfss3aawscredentialsprovider=comamazonawsauthInstanceProfileCredentialsProvider conf sparkhadoopfss3impl=orgapachehadoopfss3aS3AFileSystem conf sparkjarspackages=orgapachehadoophadoopaws334orgapacheicebergicebergsparkruntime35212152orgapacheicebergicebergawsbundle152 conf sparksqlextensions=orgapacheicebergsparkextensionsIcebergSparkSessionExtensions conf sparksqlcataloglocal=orgapacheicebergsparkSparkCatalog conf sparksqlcataloglocaltype=hadoop conf sparksqlcataloglocalwarehouse=s3a//// conf sparksqldefaultCatalog=local conf sparksqlcataloglocalioimpl=orgapacheicebergawss3S3FileIO sparkbenchmarkassembly351jar s3///benchmarkrun 3000 1 false q1v213q10v213q11v213q12v213q13v213q14

Stable AI 的最佳图像生成模型现已在 Amazon Bedrock 上推出 新闻博客

Stable AI 的最佳图像生成模型现已在 Amazon Bedrock 上推出 新闻博客

Stability AI 的最佳图像生成模型现已上线 Amazon Bedrock关键要点Stability AI 发布了三款新颖的文本到图像生成模型:Stable Image Ultra、Stable Diffusion 3 Large 和 Stable Image Core。这些模型在多主题提示...

订阅邮箱