我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
使用亚马逊 EMR Serverless 上的 亚马逊云科技 Graviton2 将 Spark 工作负载的性价比提高多达 27%
这篇文章讨论了在 EMR 无服务器上使用 亚马逊云科技 Graviton2 运行 Apache Spark 任务时观察到的性能改进。我们发现,基于运行时间,EMR Serverless 上的 Graviton2 将 Spark 工作负载的性能提高了 10%。亚马逊云科技 Graviton2 的成本比 x86 架构选项低20%(详情请参阅
Spark 性能测试结果
以下图表比较了 EMR Serverless Spark 应用程序在使用 Graviton2 和不使用 Graviton2 时的基准运行时间(请注意,这些图表不是按比例绘制的)。我们观察到,与 x86 相比,查询的总运行时间提高了 10%,几何平均值提高了 8%。
下表总结了我们的结果。
| Metric | Graviton2 | x86 | %Gain |
| Total Execution Time (in seconds) | 2,670 | 2,959 | 10% |
| Geometric Mean (in seconds) | 22.06 | 24.07 | 8% |
测试配置
为了评估性能改进,我们使用源自 TPC-DS 3 TB 规模性能基准测试的基准测试。基准测试包含 104 个查询,每个查询都按顺序提交到 EMR 无服务器应用程序。默认情况下,EMR Serverless 启用了自动和细粒度扩展。Spark 提供动态资源分配 (DRA),可根据工作负载动态调整应用程序资源,而 EMR Serverless 使用来自 DRA 的信号根据需要弹性扩展工作人员。在测试中,我们选择了预定义的
下表总结了 Spark 应用程序的配置。
| Number of Drivers | Driver Size | Number of Executors | Executor Size | Ephemeral Storage | Amazon EMR release label |
| 1 | 4 vCPUs, 16 GB Memory | 100 | 4 vCPUs, 16 GB Memory | 200 G | 6.9 |
性能测试结果和成本比较
让我们对基准测试进行成本比较。因为我们每次运行都使用了 1 个驱动程序 [4 个 vCPU,16 GB 内存] 和 100 个执行器 [4 个 vCPU,16 GB 内存],因此使用的总容量为 4*101=192 个 vCPU,16*101=1616 GB 内存,200*100=20000 GB 存储空间。下表汇总了成本。
| Test | Total time (Seconds) | vCPUs | Memory (GB) | Ephemeral (Storage GB) | Cost |
| x86_64 | 2,958.82 | 404 | 1616 | 18000 | $26.73 |
| Graviton2 | 2,670.38 | 404 | 1616 | 18000 | $19.59 |
计算结果如下:
- vCPU 总成本 =(vCPU 数量 * 每 vCPU 速率 x 作业运行时间(以小时为单位)
- 总 GB =(配置的总内存 GB * 每 GB 小时速率 x 作业运行时间(以小时为单位)
- 存储 = 默认情况下,20 GB 的临时存储空间可供所有工作人员使用,您只需为每个工作人员配置的任何额外存储支付费用
费用明细
让我们来看看 x86 的成本明细:
- 作业运行时间 — 49.3 分钟 = 0.82 小时
- vCPU 总成本 — 404 个 vCPU x 0.82 小时作业运行时间 x 每个 vCPU 0.052624 美元 = 17.4333 美元
- GB 总成本 — 1,616 GB 内存 x 0.82 小时作业运行时间 x 每块内存 0.0057785 美元 GB = 7.6572 美元
- 存储成本 — 18,000 GB 存储 x 0.82 小时作业运行时间 x 每存储 0.000111 美元 = 1.6386 美元
- 额外存储空间 — 20,000 GB — 20 GB 免费套餐 * 100 名员工 = 18,000 个额外存储空间 GB
- EMR 无服务器总成本 (x86): 17.4333 美元 + 7.6572 美元 + 1.6386 美元 = 26.7291 美元
让我们比较一下 Graviton 2 的成本明细:
- 作业运行时间 — 44.5 分钟 = 0.74 小时
- vCPU 总成本 — 404 个 vCPU x 0.74 小时作业运行时间 x 每个 vCPU 0.042094 美元 = 12.5844 美元
- GB 总成本 — 1,616 GB 内存 x 0.74 小时作业运行时间 x 每块内存 0.004628 美元 GB = 5.5343 美元
- 存储成本 — 18,000 GB 存储 x 0.74 小时作业运行时间 x 每存储 GB 0.000111 美元 = 1.4785 美元
- 额外存储空间 — 20,000 GB — 20 GB 免费套餐 * 100 名员工 = 18,000 个额外存储空间 GB
- EMR 无服务器总成本 (Graviton2): 12.5844 美元 + 5.5343 美元 + 1.4785 美元 = 19.5972 美元
测试表明,在基准测试中,亚马逊云科技 Graviton2可以节省27%的总体成本。
个人查询的改进和观察
下图显示了使用 Graviton2 与 x86 相比单个查询的相对速度。
我们在一些较短的查询中看到了一些回归,这对整体基准测试运行时影响不大。我们观察到长时间运行的查询可以获得更好的性能提升,例如:
- q67 x86 的平均值为 86 秒,Graviton2 为 74 秒,运行时性能提高 24%
- q23a和q23b分别上涨了14%和16%
- q32 倒退了 7%;平均运行时间之间的差异小于 500 毫秒(Graviton2 为 11.09 秒,x86 为 10.39 秒)
为了量化性能,我们使用源自 TPC-DS 3 TB 规模性能基准测试的基准 SQL。
如果您正在评估将工作负载迁移到 EMR Serverless 上的 Graviton2 架构,我们建议您根据实际用例测试 Spark 工作负载。结果可能会因
结论
如本文所示,EMR 无服务器应用程序上的 Graviton2 持续为 Spark 工作负载提供更好的性能。Graviton2 在所有支持 EMR 无服务器的地区均可用。要查看可用 EMR 无服务器的地区列表,请参阅 EMR 无服务器常见问题解
如果你想知道用例可以提高多少性能,可以试试这篇文章中概述的步骤,然后用你的查询来代替。
作者简介
Karthik Prabhakar 是 A
WS 亚马逊 EMR 的高级大数据解决方案架构师。他是一位经验丰富的分析工程师,与 亚马逊云科技 客户合作,提供最佳实践和技术建议,以帮助他们在数据之旅中取得成功。
Nithish Kumar Murcherla 是亚马逊
EMR Serverless 团队的高级系统开发工程师。他热衷于分布式计算、容器以及与数据有关的一切事物。
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。