首页 > 解决方案 > Spark 驱动程序中的内存泄漏

问题描述

我使用了 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

具有相同行为的测试用例:

依赖项

标签: apache-spark

解决方案


最后,Spark UI 中内存的增加是 Spark 版本高于2.3.3的一个 bug 。有一个修复。它将影响 Spark 版本2.4.5+

火花相关问题:


推荐阅读