发布于: Jul 11, 2022

适用于 Apache Spark 的 Amazon EMR 运行时是一种针对 Apache Spark 优化性能的运行时环境,默认在 Amazon EMR 集群 5.28 及更高版本上可用并已启用。适用于 Spark 的 Amazon EMR 运行时速度提高了 3 倍,并且与开源 Spark 的 API 兼容性达到 100%。

今天,我们很高兴地宣布推出结果片段缓存,这是适用于 Apache Spark 的 Amazon EMR 运行时中的一项新功能,有助于提升针对静态数据子集的查询速度。在我们派生自 TPC-H 基准的内部测试中,当使用结果片段缓存时,采用滚动和增量窗口函数的查询始终提供高达 15.6 倍的查询性能加速。

客户在 Amazon S3 中的数据通常不随时间发生变化。不过,对这类数据集的重复查询需要在每次运行中重新计算结果。以电子商务订单数据为例,该数据中包含 30 天内交付或退款的订单信息。假设有一个用户想要比较某个产品在一整年中的每日订单趋势。除了过去 30 天的数据之外,所有订单数据基本上没有变化,但如果查询汇总过去 1 年中每一天的订单退款,则在每次查询运行时都需要重新计算一年中每天的结果。结果片段缓存通过自动缓存结果片段(即,来自 Spark 查询计划子树的所有部分的结果),然后在后续查询执行中重新使用这些结果来解决此问题。结果片段缓存允许最大限度地重用缓存的数据,因为片段(即,结果的部分)可以在后续查询中重用,这与结果集缓存相反,在结果集缓存中,查询必须完全匹配才能从缓存中返回结果。结果片段存储在客户指定的 S3 桶中,可以在多个集群中重复使用。这样可以加快查询速度,尤其是当结果比输入数据集小得多时。通过结果片段缓存,对过去 1 年的订单进行汇总的重复查询将只需要计算过去 30 天中有变化的数据,而对于该年中所有之前的天数,只需要从缓存中提供汇总的结果,这大大提高了查询性能。对于那些基本上不可变的、仅在当天插入的数据的查询,例如 IOT 事件、点击流数据等,速度的提升可能更加明显。在极少数情况下,数据可能被修改,结果片段缓存会自动检测缓存的数据并使其失效,从而确保数据的准确性。

结果片段缓存在现已推出适用于 Apache Spark 的 Amazon EMR 运行时的所有区域均可用。

要开始使用结果片段缓存,请在此处查看我们的文档。