集群大小调整

默认情况下,Cloud Data Fusion 使用自动扩缩作为计算配置文件。估算工作负载的最佳集群工作器(节点)数量非常困难,并且为整个流水线使用单个集群大小通常并不理想。Dataproc 自动扩缩提供了一种自动管理集群资源的机制,还支持集群工作器虚拟机自动扩缩。如需了解详情,请参阅自动扩缩

计算配置页面上,您可以看到配置文件列表的核心总数列,其中列出了配置文件可以纵向扩容到的 vCPU 数量上限,例如 Up to 84

如果要使用 Dataproc 计算配置文件,您可以根据流水线大小管理集群大小。

主节点

主节点使用与集群上运行的流水线或其他应用的数量成比例的资源。如果您在临时集群上运行流水线,请为主节点使用 2 个 CPU 和 8 GB 内存。如果您使用的是永久性集群,则可能需要更大的主节点才能与工作流保持同步。如需了解是否需要更大的主节点,您可以监控节点上的内存和 CPU 使用情况。我们建议您调整工作器节点的大小,使其至少配备 2 个 CPU 和 8 GB 内存。如果您已将流水线配置为使用更大的内存量,则必须使用更大的工作器。

为了最大限度地减少执行时间,请确保您的集群具有足够的节点,以尽可能减少并行处理。

工作器

以下各部分介绍了调整工作器节点大小的各个方面。

CPU 和内存

我们建议您将工作器节点的大小设置为至少 2 CPU 和 8 GB 内存。如果您将流水线配置为使用更多内存量,请使用较大的工作器。例如,对于 4 个 CPU 15 GB 的工作器节点,每个工作器将有 4 个 CPU 和 12 GB 可用于运行 YARN 容器。如果您的流水线配置为运行 1 个 CPU、8 GB 执行器,则 YARN 无法在每个工作器节点运行多个容器。每个工作器节点都会有一个额外的 3 CPU 和 4 GB,这会造成浪费,因为它无法用于运行任何内容。为了最大限度地提高集群的资源利用率,您希望 YARN 内存和 CPU 数量是每个 Spark 执行器所需数量的确切倍数。您可以通过检查 YARN 中的 yarn.nodemanager.resource.memory-mb 属性来检查每个工作器为 YARN 预留的内存量。

如果您使用的是 Dataproc,则 YARN 容器的可用内存约为虚拟机内存的 75%。最小 YARN 容器大小也会根据工作器虚拟机的大小进行调整。下表给出了一些常见的工作器大小及其对应的 YARN 设置。

工作器 CPU 工作器内存 (GB) YARN 节点内存 (GB) YARN 分配内存下限 (MB)
1 4 3 256
2 8 6 512
4 16 12 1024
8 32 24 1024
16 64 51 1024

请记住,Spark 请求的内存多于为流水线设置的执行器内存,而 YARN 请求的内存量会增加。例如,假设您已将执行器内存设置为 2048 MB,且尚未为 spark.yarn.executor.memoryOverhead 提供值(这意味着将使用 384 MB 的默认值)。这意味着 Spark 为每个执行器请求 2048 MB + 384 MB,YARN 将向上舍入为 YARN 最小分配量的精确倍数。在 8 GB 工作器节点上运行时,由于 YARN 的最小分配量为 512 MB,因此向上舍入到 2.5 GB。这意味着每个工作器可以运行两个容器,用完所有可用的 CPU,但会保留 1 GB 的 YARN 内存(6 GB - 2.5 GB - 2.5 GB)未使用。这意味着实际上可以将工作器节点的大小缩小一点,或者可以为执行程序提供稍多的内存。在 16 GB 工作器节点上运行时,2048 MB + 1024 MB 向上舍入为 3 GB,因为 YARN 的最小分配量为 1024 MB。这意味着每个工作器节点能够运行四个容器,并且所有 CPU 和 YARN 内存都被使用。

为便于理解,下表针对一些常见执行器大小列出了推荐的工作器大小。

执行器 CPU 执行器内存 (MB) 工作器 CPU 工作器内存 ( GB)
1 2048 4 15
1 3072 4 21
1 4096 4 26
2 8192 4 26

例如,一个 26 GB 的工作器节点相当于 20 GB 的内存可用于运行 YARN 容器。将执行器内存设置为 4 GB 后,将增加 1 GB 作为开销,这意味着每个执行器有 5 GB YARN 容器。这意味着工作器可以运行四个容器,而不会有任何多余的资源。您也可以乘以 worker。例如,如果执行程序内存设置为 4096 GB,则具有 8 个 CPU 和 52 GB 内存的工作器也可以正常使用。Compute Engine 虚拟机根据核心数限制虚拟机可拥有的内存量。例如,具有 4 个核心的虚拟机必须至少有 7.25 GB 的内存和最多 26 GB 的内存。这意味着设置为使用 1 个 CPU 和 8 GB 内存的执行器在虚拟机上使用 2 个 CPU 和 26 GB 内存。如果执行程序被配置为使用 2 个 CPU 和 8 GB 内存,则会利用所有 CPU。

磁盘

磁盘对于某些流水线很重要,但并非所有流水线都很重要。如果您的流水线不包含任何 shuffle,则只有在 Spark 耗尽内存并且需要将数据溢出到磁盘时,才会使用磁盘。对于这些类型的流水线,磁盘大小和类型通常不会对性能产生很大影响。如果您的流水线对大量数据进行了重排,则磁盘性能将产生影响。如果您使用的是 Dataproc,建议您使用至少 1tb 的磁盘大小,因为磁盘性能会随着磁盘大小的增加而提升。如需了解磁盘性能,请参阅配置磁盘以满足性能要求

工作器数量

为了最大限度地缩短执行时间,您需要确保集群足够大,可以尽可能多地并行运行。例如,如果流水线来源使用 100 个分片读取数据,那么您需要确保集群足够大,可以同时运行 100 个执行器。

要判断集群是否规模过小,最简单的方法是查看一段时间内的 YARN 待处理内存。如果您使用的是 Dataproc,可以在集群详情页面找到一个图表。

如果待处理内存在很长一段时间内一直很高,您可以增加工作器数量,以便为集群添加这么多的额外容量。在前面的示例中,集群应增加约 28 GB,以确保实现最大并行级别。

增强的灵活模式 (EFM)

EFM 可让您指定在重排数据时仅涉及主工作器节点。由于辅助工作器不再负责中间 Shuffle 数据,因此从集群中移除辅助工作器后,Spark 作业不会遇到延迟或错误。由于主工作器永远不会缩容,因此集群会缩容,同时提高稳定性和效率。如果您在静态集群上运行包含 shuffle 的流水线,建议您使用 EFM。

如需详细了解 EFM,请参阅 Dataproc 增强的灵活性模式