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

问题描述 投票:0回答:2

我们一直在使用spark-shell中的交互式spark作业或在RStudio等中运行Sparklyr来观察此行为。

假设我在纱线客户端模式下启动了spark-shell并执行了一个动作,它触发了一个作业中的几个阶段并消耗了x核心和y MB内存。一旦此作业完成,并且相应的spark会话仍处于活动状态,即使该作业完成,也不会释放分配的内核和内存。这是正常的行为吗?

在相应的spark会话结束之前,ip:8088 / ws / v1 / cluster / apps / application_1536663543320_0040 /保持显示:y x z

我想,Yarn会动态地将这些未使用的资源分配给等待资源的其他spark作业。请澄清我在这里是否遗漏了什么。

apache-spark yarn
2个回答
0
投票

是的,资源会在SparkSession处于活动状态之前分配。为了更好地处理这个,您可以使用动态分配。

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


0
投票

你需要在动态分配https://spark.apache.org/docs/latest/configuration.html#dynamic-allocation周围玩配置 -

  1. spark.dynamicAllocation.executorIdleTimeout设置为较小的值,比如10s。此参数的默认值为60秒。这个配置告诉spark它应该只在空闲这么长时间才释放执行器。
  2. 检查spark.dynamicAllocation.initialExecutors / spark.dynamicAllocation.minExecutors。将这些设置为较小的数字 - 比如1/2。除非关闭SparkSession,否则spark应用程序永远不会低于此数字。

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

© www.soinside.com 2019 - 2024. All rights reserved.