什么控制给应用程序提供了多少Spark Cluster?

时间:2015-01-14 14:11:37

标签: resources apache-spark

在用于静态分区的文档https://spark.apache.org/docs/latest/job-scheduling.html的此页面中,它说“使用此方法,每个应用程序都可以使用最多的资源”。

我只是想知道,这些最大的资源是什么?我找到了每个执行程序设置的内存(在动态分区中刚才提到),我假设限制了应用程序获得的内存资源。但是,决定启动了多少个执行器/使用了多少个来自集群的节点,例如总集群内存和“被采用”的核心?

在另一个类似的说明中,是否有办法更改每个作业或任务级别所要求的内存?

1 个答案:

答案 0 :(得分:12)

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

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

  

Spark独立应用程序的默认核心数   模式,如果他们没有设置spark.cores.max。如果没有设置,应用程序   除非配置spark.cores.max,否则始终获取所有可用内核   他们自己。在共享群集上将此值设置得较低,以防止用户访问   默认情况下抓取整个群集。

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

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

在YARN中,按documentation

  

Spark YARN客户端的--num-executors选项控制了多少   它将在集群上分配执行程序,而--executor-memory和   --executor-cores控制每个执行程序的资源。

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