为什么YARN上的驱动程序和执行程序的核心数与请求的数量不同?

时间:2017-12-21 16:05:13

标签: apache-spark yarn

我使用以下

在群集模式下部署spark作业
  

驱动核心 - 1
  执行者核心 - 2
  执行人数 - 2.

我的理解是这个应用程序应占用集群中的5个核心(4个执行器核心和1个驱动核心),但我没有在RM和Spark UI中观察到这一点。

  
      
  1. 在资源管理器UI上,我看到只有4个核心用于此应用程序。
  2.   
  3. 即使在Spark UI中(点击RM的ApplicationMaster URL),在执行程序选项卡下,驱动程序核心显示为零。
  4.   

我错过了什么吗?

集群管理器是YARN。

1 个答案:

答案 0 :(得分:4)

  

我的理解是这个应用程序应占用集群中的5个核心(4个执行器核心和1个驱动核心)

这是YARN中的完美情况,它可以为您管理的CPU提供5个内核。

  

但我没有在RM和Spark UI中观察到这一点。

由于完美的情况经常不会发生,因此我们可以从YARN获得尽可能多的内核,这样Spark应用程序就可以启动了。

Spark可以无限期地等待所请求的内核,但这并不总是符合您的喜好,是吗?

这就是为什么Spark on YARN有一个额外的检查(又名minRegisteredRatio),这是在应用程序开始执行任务之前请求的 80%核心的最小值。您可以使用spark.scheduler.minRegisteredResourcesRatio Spark属性来控制比率。这可以解释为什么你看到使用的内核少于请求的内核。

引用the official Spark documentation(突出我的):

  

<强> spark.scheduler.minRegisteredResourcesRatio

     YARN模式的

0.8

     

注册资源(注册资源/预期资源总量)的最小比率(资源是纱线模式下的执行者,独立模式下的CPU核心和Mesos粗粒度模式['spark.cores.max'值是总预期资源Mesos粗粒度模式])在调度开始之前等待。 指定为0.0到1.0之间的双倍。无论是否达到最小资源比率,在调度开始之前等待的最长时间由config spark.scheduler.maxRegisteredResourcesWaitingTime控制。