是什么控制了将多少 Spark 集群提供给应用程序?

What controls how much of a Spark Cluster is given to an application?

在文档 https://spark.apache.org/docs/latest/job-scheduling.html 的这一页中,对于静态分区,它说 "With this approach, each application is given a maximum amount of resources it can use"。

我只是想知道,这些最大资源是多少?我发现每个执行程序的内存设置(在下面的动态分区中提到)我假设这限制了应用程序获取的内存资源。但是什么决定启动了多少执行程序/使用了集群中的多少节点,例如总集群内存和获得 "taken"?

的内核

关于另一个类似的说明,有没有办法更改每个作业或任务级别要求的内存?

资源量取决于所使用的集群管理器,因为不同的集群管理器将提供不同的分配。

例如,在独立模式下,Spark 将尝试使用所有节点。 spark.max.cores 将控制作业将跨节点占用的总共多少个核心。如果未设置,Spark 将使用 spark.deploy.defaultCoresspark.deploy.defaultCores 的文档进一步阐明了它的用法:

Default number of cores to give to applications in Spark's standalone mode if they don't set spark.cores.max. If not set, applications always get all available cores unless they configure spark.cores.max themselves. Set this lower on a shared cluster to prevent users from grabbing the whole cluster by default.

在Mesos粗粒度模式下,Spark会默认分配所有可用核。使用 spark.max.cores 来限制每个作业。

在 Mesos 细粒度模式下,Spark 会根据作业的需要为每个任务分配一个核,然后释放它们。这确保了以更高的任务分配开销为代价的公平使用。

在 YARN 中,根据 documentation

The --num-executors option to the Spark YARN client controls how many executors it will allocate on the cluster, while --executor-memory and --executor-cores control the resources per executor.

关于内存,无法设置每个作业或任务的总内存,只能使用每个执行程序,使用 spark.executor.memory。分配给您的作业的内存将为 spark.executor.memory x #executors