Amazon Glue Spark 随机排序管理器与 Amazon S3 - Amazon Glue
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

Amazon Glue Spark 随机排序管理器与 Amazon S3

每当数据在分区之间重新排列时,随机排序是 Spark 任务中的一个重要步骤。这是必需的,因为 joingroupByKeyreduceByKeyrepartition 等广泛的转换需要来自其他分区的信息才能完成处理。Spark 从每个分区收集所需的数据,并将其合并到一个新的分区中。在随机排序过程中,数据会写入磁盘并通过网络传输。因此,随机排序操作绑定到本地磁盘容量。当执行程序上没有足够的磁盘空间并且没有恢复时,Spark 会抛出一个 No space left on deviceMetadataFetchFailedException 错误。

Solution

通过 Amazon Glue 2.0,您现在可以使用 Amazon S3 存储 Spark 随机排序和溢出数据。Amazon S3 是一种对象存储服务,提供行业领先的可扩展性、数据可用性、安全性和性能。此解决方案可分解 Spark 任务的计算和存储,并提供完整的弹性和低成本的随机排序存储,使您能够可靠地运行随机排序最密集的工作负载。

我们将推出一个新的随机排序管理器(称为 GlueShuffleManager),它将在 Amazon S3 中写入和读取随机排序文件。如果已知任务受大规模随机排序操作的本地磁盘容量限制,则可以启用 Amazon S3 随机排序来可靠、无故障地运行 Amazon Glue 任务。在某些情况下,如果您有大量的小分区或随机排序文件写入 Amazon S3,则随机排序到 Amazon S3 的速度比本地磁盘(或 EBS)慢一些。

从 Amazon 控制台使用 Amazon Glue Spark 随机排序管理器

在配置任务时使用 Amazon Glue 控制台或 Amazon Glue Studio 设置 Amazon Glue Spark 随机排序管理器:选择 --write-shuffle-files-to-s3 任务参数启用任务的 Amazon S3 随机排序。

使用 Amazon Glue Spark 随机排序管理器

以下任务参数启用并调整 Amazon Glue 随机排序管理器。

  • --write-shuffle-files-to-s3 – 主标志,如果为 true,则启用 Amazon Glue Spark 随机排序管理器,以使用 Amazon S3 存储桶写入和读取随机排序数据。如果为 false 或未指定,则不使用随机排序管理器。

  • --write-shuffle-spills-to-s3 – 一个可选标志,如果为 true,则允许您将溢出文件卸载到 Amazon S3 存储桶,从而为您的 Spark 任务提供额外的弹性。只有将大量数据溢出到磁盘的大型工作负载才需要这样做。如果为 false,则不会写入中间溢出文件。默认情况下,禁用此标志。

  • --conf spark.shuffle.glue.s3ShuffleBucket=S3://<shuffle-bucket> – 另一个可选标志,用于指定您在其中写入随机排序文件的 Amazon S3 存储桶。默认为 --TempDir/随机排序数据。

Amazon Glue 支持 Spark 提供的所有其他随机排序相关配置。

注释和限制

以下是 Amazon Glue 随机排序管理器的注释或限制:

  • Amazon Glue 目前仅在 Amazon Glue 2.0 版和 Spark 2.4.3 上支持随机排序管理器。

  • 确保随机排序存储桶位于与任务运行区域相同的 Amazon 区域。

  • 在前缀上设置 Amazon S3 存储生命周期策略,因为任务完成后,随机排序管理器不会清理文件。

  • 如果数据出现误差,则可以使用此功能。