YARN集群模式减少了执行程序实例的数量

时间:2017-12-28 10:27:41

标签: apache-spark yarn google-cloud-dataproc

我按以下方式配置Google Cloud Dataproc群集: gcloud dataproc clusters create spark --async --image-version 1.2 \ --master-machine-type n1-standard-1 --master-boot-disk-size 10 \ --worker-machine-type n1-highmem-8 --num-workers 4 --worker-boot-disk-size 10 \ --num-worker-local-ssds 1

使用

yarn-cluster模式启动Spark应用程序
  • spark.driver.cores=1
  • spark.driver.memory=1g
  • spark.executor.instances=4
  • spark.executor.cores=8
  • spark.executor.memory=36g

只会启动3个执行器实例而不是请求的4个实例,实际上“浪费”一个似乎只运行驱动程序的完整工作节点。此外,在驱动程序的工作节点上减少spark.executor.cores=7以“保留”核心似乎没有帮助。

yarn-cluster模式下与执行程序进程一起运行驱动程序需要哪些配置才能最佳地利用可用资源?

1 个答案:

答案 0 :(得分:2)

使用Dataproc 1.2的n1-highmem-8配置为每个YARN NodeManager可分配40960m。指示spark每个执行程序使用36g堆内存还包括3.6g memoryOverhead(0.1 *堆内存)。 YARN将这个分配为完整的40960m。

驱动程序将使用1g堆和384m用于memoryOverhead(最小值)。 YARN将此分配为2g。由于驱动程序将始终在执行程序之前启动,因此首先分配其内存。当为执行程序提供40960的分配请求时,没有可用内存的节点,因此在与驱动程序相同的节点上没有分配容器。

使用spark.executor.memory = 34g将允许驱动程序和执行程序在同一节点上运行。