资源管理

借助流水线,您可以指定要分配给驱动程序和每个执行程序的 CPU 和内存。您可以在 Cloud Data Fusion Studio 流水线配置中配置资源。如需了解详情,请参阅管理数据流配置

本页面提供了有关如何为您的用例配置驱动程序和执行器资源的准则。

驱动器

由于驱动程序无法执行很多工作,因此默认配备 1 个 CPU 和 2 GB 内存,这足以运行大多数流水线。对于包含多个阶段或大型架构的流水线,您可能需要增加内存。如并行处理 JOIN 操作中所述,如果流水线执行内存联接,则内存数据集也需要适合驱动程序的内存。

Executor

请考虑以下有关 CPU 和内存资源的准则。

CPU

分配给执行程序的 CPU 数量决定了执行程序可以并行运行的任务数量。每个数据分区都需要一个任务来处理。在大多数情况下,最简单的方法是将 CPU 数量设置为 1,然后专注于调整内存。

内存

对于大多数流水线,4 GB 的执行器内存足以成功运行流水线。使用 4 GB 的执行器内存完成了严重偏斜的多兆字节联接。您可以通过增加内存量来提高执行速度,但这需要您对数据和流水线有深入的了解。

Spark 会将内存划分为多个部分。其中一个部分用于 Spark 内部使用,另一个部分用于执行和存储。

默认情况下,存储和执行部分大约占总内存的 60%。Spark 的 spark.memory.fraction configuration 属性(默认为 0.6)用于控制此百分比。此数量对于大多数工作负载都非常有效,通常不需要调整。

存储和执行部分进一步划分为存储空间和执行空间。默认情况下,这些空间的大小相同,但您可以通过设置 spark.memory.storageFraction(默认为 0.5)来调整它们,以控制预留用于存储空间的百分比。

存储空间用于存储缓存数据。执行空间用于存储 shuffle、联接、排序和汇总数据。如果执行部分有额外的空间,Spark 可以将其中的一部分用于存储数据。不过,执行数据绝不会使用任何存储空间。

如果您知道流水线不会缓存任何数据,则可以减小存储空间百分比,为执行要求留出更多空间。

注意事项:YARN 容器内存

执行器内存设置用于控制分配给执行器的堆内存量。Spark 会为非堆内存额外添加内存,该内存由 spark.executor.memoryOverhead 设置控制,默认为 384m。这意味着,YARN 为每个执行程序预留的内存量高于在流水线资源配置中设置的数量。例如,如果您将执行器内存设置为 2048m,Spark 会将 384m 加到该数字上,并向 YARN 请求 2432m 的容器。此外,YARN 会将请求数量向上舍入到 yarn.scheduler.increment-allocation-mb(默认为 yarn.scheduler.minimum-allocation-mb)的倍数。如果将其设置为 512,YARN 会将 2432 米舍入为 2560 米。如果将此值设置为 1024,YARN 会将 2432m 向上舍入到 3072m。在确定集群中每个工作器节点的大小时,请务必注意这一点。