Spark动态资源分配和排队应用程序

时间:2017-10-31 20:11:10

标签: hadoop apache-spark amazon-ec2 yarn amazon-emr

根据Cloudera documentation

  

启用Spark动态资源分配后,所有资源都将分配给可用的第一个提交作业,从而导致后续应用程序排队。要允许应用程序并行获取资源,请将资源分配给池并在这些池中运行应用程序,并使池中运行的应用程序能够被抢占。

我自己也观察过这种行为,但是我目前正在开发一个只有2个节点(EMR上为m3.xlarge)和1个master(r3.xlarge)的小型集群。我所看到的是,如果我提交多个spark应用程序(对spark-submit的不同调用),当我在EMR上查找我的资源管理器时,所有应用程序都会被接受但只有一个一次运行

现在这可能是因为我正在阅读大约2GB的文件并且我的资源已经超出。我还尝试使用Spark中现有的spark-submit示例进行一些pi.py调用。在这种情况下,我可以在运行状态下看到多个作业。

鉴于此,Cloudera文档是正确的还是误导性的?如果我有一个更大的集群,我会看到多个应用程序并行运行吗?

1 个答案:

答案 0 :(得分:0)

Spark动态分配

动态分配带有上下执行程序扩展的策略,如下所示:

当存在待处理任务时,扩展策略会请求新执行程序,并且由于执行程序启动缓慢且Spark应用程序可能需要更多,因此会以指数方式增加执行程序数。

缩小规则删除已为spark.dynamicAllocation.executorIdleTimeout秒空闲的执行程序。

Cloudera资源到池

所以cloudera说的是,由于任务未决,可能只有一份工作可能会占用所有资源,请创建纱线问题并为每个问题分配特定数量的资源。请点击链接如何创建纱线问题。

https://discuss.pivotal.io/hc/en-us/articles/201623853-How-to-configure-queues-using-YARN-capacity-scheduler-xml

以上案例 情景1

在您的工作中可能会有更多待处理任务,并且由于动态资源分配,大部分资源都会分配给单个作业,即使您提交了下一个应用程序,它也会因资源而处于等待状态。

场景2

当您运行这些示例时,作业所需的资源可能是较少的任务,动态分配不会旋转更多的执行程序(因为没有待处理的任务)。由于群集中有额外的(未分配的)资源,下一个应用程序正在运行而不是等待状态。