火花动态资源分配如何在YARN上工作(关于NodeManagers)?

时间:2017-06-20 13:21:27

标签: apache-spark yarn

假设我有4个NM,我已经在yarn-client模式下配置了spark。然后,我将动态分配设置为true,以根据工作负载自动添加或删除执行程序。如果我理解正确,每个Spark执行器都作为Yarn容器运行。

那么,如果我添加更多NM,执行者的数量会增加吗?

如果我在Spark应用程序运行时删除NM,该应用程序会发生什么事情?

我可以根据其他指标添加/删除执行程序吗?如果答案是肯定的,那么有一个函数,最好是在python中,这样做吗?

1 个答案:

答案 0 :(得分:1)

  

如果我理解正确,每个Spark执行器都作为Yarn容器运行。

是。这就是部署到YARN的任何应用程序,包括Spark的情况。 Spark对YARN来说并不特别。

  

那么,如果我添加更多NM,执行者的数量会增加吗?

没有。 YARN NodeManagers和Spark的执行者之间没有任何关系。

来自Dynamic Resource Allocation

  

Spark提供了一种机制,可根据工作负载动态调整应用程序占用的资源。这意味着如果不再使用它们,您的应用程序可能会将资源返回给群集,并在需要时稍后再次请求它们。

正如您现在可能已经猜到的那样,当您决定是否请求新的执行程序或删除一些执行程序时,您的群集中有多少个NM并且工作量是无关紧要的。

  

如果我在Spark应用程序运行时删除NM,该应用程序会发生什么事情?

是的,但只有当Spark使用NM作为执行者时。毕竟,NodeManager为YARN集群管理器提供资源(CPU和内存),然后将它们提供给Spark应用程序等应用程序。如果你把它们拿回来,比如关闭节点,那么资源将不再可用,并且Spark执行器的进程就会死掉(就像没有资源可以运行的任何其他进程一样)。

  

我可以根据其他指标添加/删除执行程序吗?

是的,但通常是Spark工作(没有双关语)来进行计算并请求新的执行者。

您可以使用SparkContext来使用killExecutorsrequestExecutorsrequestTotalExecutors方法管理执行者。

  

killExecutor(executorId:String):Boolean 请求集群管理器终止指定的执行程序。

     

requestExecutors(numAdditionalExecutors:Int):Boolean 从集群管理器请求额外数量的执行程序。

     

requestTotalExecutors(numExecutors:Int,localityAwareTasks:Int,hostToLocalTask​​Count:Map [String,Int]):Boolean 根据我们的日程安排需求更新集群管理器。

相关问题