我使用的是 Spark 2.1.1 并升级到最新版本 2.4.4。我从 Spark UI 观察到驱动程序内存是 不断增加经过长时间的运行,我遇到了以下错误: java.lang.OutOfMemoryError:超出 GC 开销限制
在 Spark 2.1.1 中,驱动程序内存消耗(Storage Memory 选项卡)极低,并且在运行 ContextCleaner 和 BlockManager 之后,内存正在减少。
此外,我测试了 Spark 版本 2.3.3、2.4.3 并且我有相同的行为。
如何重现这种行为:
创建一个非常简单的应用程序(流式 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 UI 内存的增加是Spark 2.3.3 以上版本的一个bug。有一个修复。
它会影响 Spark 2.4.5+ 版本。
Spark相关问题:
关于apache-spark - Spark 驱动程序中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57921719/