Spark 驱动程序中的内存泄漏
Posted
技术标签:
【中文标题】Spark 驱动程序中的内存泄漏【英文标题】:Memory leak in Spark Driver 【发布时间】:2019-09-13 10:17:27 【问题描述】:我使用的是 Spark 2.1.1,并升级到了最新版本 2.4.4。我从 Spark UI 观察到驱动程序内存不断增加,长时间运行后出现以下错误:java.lang.OutOfMemoryError: GC 开销限制超出
在 Spark 2.1.1 中,驱动程序的内存消耗(存储内存选项卡)非常低,并且在运行 ContextCleaner 和 BlockManager 之后,内存正在减少。
此外,我测试了 Spark 版本 2.3.3、2.4.3,我的行为相同。
如何重现这种行为:
创建一个非常简单的应用程序(streaming count_file.py)以重现此行为。此应用程序从目录中读取 CSV 文件,计算行数,然后删除处理过的文件。
import os
from pyspark.sql import SparkSession
from pyspark.sql import functions as F
from pyspark.sql import types as T
target_dir = "..."
spark=SparkSession.builder.appName("DataframeCount").getOrCreate()
while True:
for f in os.listdir(target_dir):
df = spark.read.load(f, format="csv")
print("Number of records: 0".format(df.count()))
os.remove(f)
print("File 0 removed successfully!".format(f))
提交代码:
spark-submit
--master spark://xxx.xxx.xx.xxx
--deploy-mode client
--executor-memory 4g
--executor-cores 3
--queue streaming count_file.py
具有相同行为的测试用例:
我使用默认设置 (spark-defaults.conf) 进行了测试 添加 spark.cleaner.periodicGC.interval 1 分钟(或更短) 转 spark.cleaner.referenceTracking.blocking=false 以集群模式运行应用程序 增加/减少执行者和驱动的资源 我在驱动程序和执行程序中使用 extraJavaOptions 进行了测试 -XX:+UseG1GC -XX:InitiatingHeapOccupancyPercent=35 -XX:ConcGCThreads=12依赖关系
操作系统:Ubuntu 16.04.3 LTS Java:jdk1.8.0_131(也用 jdk1.8.0_221 测试过) Python:Python 2.7.12【问题讨论】:
csv 文件有多大?从你的信息来看,我没有看到你设置了驱动内存这个参数。 @DennisLi 我所描述的行为与 CSV 的大小或驱动程序内存无关。我使用小型 CSV (2-3M) 和大型 CSV (200-300M) 以及不同的驱动程序内存 (1G -15G) 进行了测试。在给定的代码中,spark使用默认的驱动内存1G 我认为您需要使用 spark-submit 设置驱动程序内存参数。 spark-submit --driver-memory 10g 例如。 @DennisLi 你可以在Spark submit或者spark-defaults.conf中设置驱动内存凋谢,我已经在spark-defaults.conf中设置了,不过这个和问题无关。 你解决了这个问题吗?我也遇到了类似的问题 【参考方案1】:最后,Spark UI 中内存的增加是 Spark 版本高于 2.3.3 的一个 bug。有一个修复。 它将影响 Spark 版本 2.4.5+。
Spark 相关问题:
Spark UI 存储内存超时增加: https://issues.apache.org/jira/browse/SPARK-29055
Spark 中可能存在内存泄漏: https://issues.apache.org/jira/browse/SPARK-29321?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel
【讨论】:
以上是关于Spark 驱动程序中的内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章