Apache spark 纱线簇模式减少了执行器实例的数量

Apache spark 纱线簇模式减少了执行器实例的数量,apache-spark,yarn,google-cloud-dataproc,Apache Spark,Yarn,Google Cloud Dataproc,我正在以以下方式配置Google Cloud Dataproc群集: gcloud dataproc群集创建spark--异步--映像版本1.2\ --主机类型n1-standard-1——主机引导盘大小10\ --工作机类型n1-highmem-8--工作机数量4--工作机引导磁盘大小10\ --num工作本地SSD 1 在纱线簇模式下启动Spark应用程序 spark.driver.cores=1 spark.driver.memory=1g spark.executor.instan

我正在以以下方式配置Google Cloud Dataproc群集:

gcloud dataproc群集创建spark--异步--映像版本1.2\
--主机类型n1-standard-1——主机引导盘大小10\
--工作机类型n1-highmem-8--工作机数量4--工作机引导磁盘大小10\
--num工作本地SSD 1

纱线簇
模式下启动Spark应用程序

  • spark.driver.cores=1
  • spark.driver.memory=1g
  • spark.executor.instances=4
  • spark.executor.cores=8
  • spark.executor.memory=36g
将只启动3个executor实例,而不是请求的4个,这实际上“浪费”了一个似乎只运行驱动程序的完整工作节点。此外,将spark.executor.cores=7减少到为驱动程序在工作节点上“保留”一个核心似乎没有帮助


需要什么配置才能在执行器进程旁边以
纱线簇
模式运行驱动程序,以最佳利用可用资源?

使用Dataproc 1.2的n1-highmem-8配置为每个纱线节点管理器可分配40960m。指示spark为每个执行器使用36g堆内存还将包括3.6g内存溢出(0.1*堆内存)。纱线会将其分配为整个40960m

驱动程序将使用1g堆和384m内存溢出(最小值)。纱线将分配为2g。由于驱动程序总是在执行器之前启动,因此首先分配其内存。当执行器收到40960的分配请求时,没有具有那么多可用内存的节点,因此没有在与驱动程序相同的节点上分配容器


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

使用Dataproc 1.2的n1-highmem-8配置为每个节点管理器可分配40960m。指示spark为每个执行器使用36g堆内存还将包括3.6g内存溢出(0.1*堆内存)。纱线会将其分配为整个40960m

驱动程序将使用1g堆和384m内存溢出(最小值)。纱线将分配为2g。由于驱动程序总是在执行器之前启动,因此首先分配其内存。当执行器收到40960的分配请求时,没有具有那么多可用内存的节点,因此没有在与驱动程序相同的节点上分配容器


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

出于好奇,您希望从集群模式(与Dataproc的默认客户端模式相反)的哪个功能中获益?@AngusDavis目前这纯粹是一个权限问题。建立Spark连接的应用程序正在GKE上运行,GKE目前似乎缺少成功运行驱动程序所需的一些权限。出于好奇,您希望从群集模式(与Dataproc的默认客户端模式相反)的哪项功能中获益?@AngusDavis目前这纯粹是权限问题。建立Spark连接的应用程序正在GKE上运行,GKE目前似乎缺少成功运行驱动程序所需的一些权限。