首页 文章

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

提问于
浏览
1

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

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

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

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

1 回答

  • 1

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

    是 . 这就是部署到YARN,Spark包含的 any 应用程序的情况 . Spark对YARN来说并不特别 .

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

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

    Dynamic Resource Allocation

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

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

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

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

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

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

    您可以使用 SparkContext 来使用killExecutorsrequestExecutorsrequestTotalExecutors方法管理执行程序 .

    killExecutor(executorId:String):Boolean请求集群管理器终止指定的执行程序 . requestExecutors(numAdditionalExecutors:Int):Boolean从集群管理器请求其他数量的执行程序 . requestTotalExecutors(numExecutors:Int,localityAwareTasks:Int,hostToLocalTaskCount:Map [String,Int]):Boolean根据我们的调度需求更新集群管理器 .

相关问题