假设我有4个NM,我在yarn-client模式下配置了spark . 然后,我将动态分配设置为true,以根据工作负载自动添加或删除执行程序 . 如果我理解正确,每个Spark Actuator 都作为Yarn容器运行 .
那么,如果我添加更多NM,执行者的数量会增加吗?
如果我在Spark应用程序运行时删除NM,该应用程序会发生什么?
我可以根据其他指标添加/删除执行程序吗?如果答案是肯定的,那么有一个函数,最好是在python中,这样做吗?
如果我理解正确,每个Spark Actuator 都作为Yarn容器运行 .
是 . 这就是部署到YARN,Spark包含的 any 应用程序的情况 . Spark对YARN来说并不特别 .
不.YARN NodeManagers和Spark的执行者之间没有任何关系 .
从Dynamic Resource Allocation:
Spark提供了一种机制,可根据工作负载动态调整应用程序占用的资源 . 这意味着如果不再使用,您的应用程序可能会将资源返回给群集,并在有需求时再次请求它们 .
正如您现在可能已经猜到的那样,当您决定是否请求新的执行程序或删除一些执行程序时,您在群集中拥有多少个NM并且工作量是不相关的 .
是的,但只有当Spark使用NM作为执行者时 . 毕竟,NodeManager为YARN集群管理器提供资源(CPU和内存),然后将它们提供给Spark应用程序等应用程序 . 如果你把它们拿回来,比如关闭节点,那么资源就不再可用了,Spark Actuator 的进程就会死掉(就像没有资源可以运行的任何其他进程一样) .
我可以根据其他指标添加/删除执行程序吗?
是的,但通常是Spark工作(没有双关语)进行计算并请求新的执行者 .
您可以使用 SparkContext 来使用killExecutors,requestExecutors和requestTotalExecutors方法管理执行程序 .
SparkContext
killExecutor(executorId:String):Boolean请求集群管理器终止指定的执行程序 . requestExecutors(numAdditionalExecutors:Int):Boolean从集群管理器请求其他数量的执行程序 . requestTotalExecutors(numExecutors:Int,localityAwareTasks:Int,hostToLocalTaskCount:Map [String,Int]):Boolean根据我们的调度需求更新集群管理器 .
1 回答
是 . 这就是部署到YARN,Spark包含的 any 应用程序的情况 . Spark对YARN来说并不特别 .
不.YARN NodeManagers和Spark的执行者之间没有任何关系 .
从Dynamic Resource Allocation:
正如您现在可能已经猜到的那样,当您决定是否请求新的执行程序或删除一些执行程序时,您在群集中拥有多少个NM并且工作量是不相关的 .
是的,但只有当Spark使用NM作为执行者时 . 毕竟,NodeManager为YARN集群管理器提供资源(CPU和内存),然后将它们提供给Spark应用程序等应用程序 . 如果你把它们拿回来,比如关闭节点,那么资源就不再可用了,Spark Actuator 的进程就会死掉(就像没有资源可以运行的任何其他进程一样) .
是的,但通常是Spark工作(没有双关语)进行计算并请求新的执行者 .
您可以使用
SparkContext
来使用killExecutors,requestExecutors和requestTotalExecutors方法管理执行程序 .