作业/阶段完成后,Spark(纱线客户端模式)未释放内存

时间:2018-09-12 06:55:25

标签: apache-spark yarn

我们通过spark-shell中的交互式spark作业或在RStudio中运行Sparklyr等来始终观察这种行为。

说,我在yarn-client模式下启动了spark-shell并执行了一个动作,该动作触发了工作的多个阶段,并消耗了x个内核和y MB内存。一旦该作业完成,并且相应的spark会话仍处于活动状态,即使该作业完成,分配的内核和内存也不会释放。 这是正常行为吗?

在相应的spark会话结束之前,ip:8088 / ws / v1 / cluster / apps / application_1536663543320_0040 / 一直显示: ÿ X z

我认为,Yarn会将这些未使用的资源动态分配给其他正在等待资源的Spark作业。 请在这里说明我是否缺少什么。

2 个答案:

答案 0 :(得分:0)

是的,资源一直分配到SparkSession处于活动状态。为了更好地处理此问题,您可以使用动态分配。

https://jaceklaskowski.gitbooks.io/mastering-apache-spark/spark-dynamic-allocation.html

答案 1 :(得分:0)

您需要围绕动态分配it is an assignment-

进行配置
  1. spark.dynamicAllocation.executorIdleTimeout设置为较小的值,例如10s。该参数的默认值为60s。此配置告诉spark只有在空闲了这么长时间后才应释放执行程序。
  2. 选中spark.dynamicAllocation.initialExecutors / spark.dynamicAllocation.minExecutors。将它们设置为一个较小的数字-例如1/2。除非关闭SparkSession,否则spark应用程序将永远不会缩小到该数字以下。

设置了这两个配置后,应用程序应在空闲10秒钟后释放额外的执行程序。