如何在YARN上启动Spark应用程序之前等待所有执行程序分配?

时间:2017-12-21 13:44:13

标签: apache-spark yarn amazon-emr

我们在纱线集群上运行火花作业,发现即使没有足够的资源,火花作业也会启动。

对于一个极端的例子,一个火花作业要求1000个执行器(4个核心和20GB ram)。在整个集群中,我们只有30个r3.xlarge节点(4个核心和32GB内存)。这项工作实际上可以启动和运行只有30个执行者。 我们尝试将动态分配设置为false,我们尝试了容量调度程序和纱线的公平调度程序。它是一样的。

如果没有足够的资源,我们如何才能开始工作?是否有任何火花面或纱线侧面设置?

1 个答案:

答案 0 :(得分:7)

我似乎刚回答a very similar question

考虑一个用例,您不希望等待所有可用资源,并在数量足够时启动

这就是为什么Spark on YARN有一个额外的检查(又名minRegisteredRatio),它是应用程序开始执行任务之前所请求的最少80%的核心。

由于您希望在Spark应用程序启动之前使所有核心都可用,因此请使用spark.scheduler.minRegisteredResourcesRatio Spark属性来控制比率。

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

  

<强> spark.scheduler.minRegisteredResourcesRatio

     YARN模式的

0.8

     

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