前言
Spark提供了一种机制,可以根据工作负载动态调整应用程序占用的资源。这意味着,如果不再使用资源,应用程序可能会将资源返还给集群,并在以后有需求时再次请求这些资源。如果Spark集群中有多个应用程序共享资源,则此功能特别有用。
该功能在默认情况下被禁用,并且在所有粗粒度集群管理器上可用,即Standalone模式、YARN模式、Mesos粗粒度模式和K8s模式。
注意:在Standalone模式下,在不显式设置spark.executor.cores的情况下,每个executor将获得一个worker的所有可用核。在这种情况下,当启用动态分配时,spark可能会获得比预期多得多的executor。当您想在Standalone模式下使用动态分配时,建议在修复问题SPARK-30299之前为每个executor显式设置核数。当然,实际生产中也几乎不会有这种模式。
现在CDP中默认Spark是开启动态资源分配的。
静态资源分配
静态资源分配是在Spark任务提交时,为应用程序分配固定数量的执行者(executors)。通过设置num-executors
参数,决定了执行者的数量。每个执行者在启动时就会使用一定数量的内存和CPU资源。
静态资源分配的优点是简单直观