Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 火花驱动器内存泄漏_Apache Spark - Fatal编程技术网

Apache spark 火花驱动器内存泄漏

Apache spark 火花驱动器内存泄漏,apache-spark,Apache 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 c

我使用了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 1min(或更短)
  • 转动spark.cleaner.referenceTracking.blocking=false
  • 以群集模式运行应用程序
  • 增加/减少执行者和驱动者的资源
  • 我在driver和executor-XX:+UseG1GC-XX:InitiatingHeapOccupencyPercent=35-XX:ConcGCThreads=12中使用extraJavaOptions进行了测试
依赖关系

  • 操作系统:Ubuntu 16.04.3 LTS
  • Java:jdk1.8.0_131(也使用jdk1.8.0_221进行测试)
  • Python:Python 2.7.12

最后,Spark UI内存的增加是Spark版本高于2.3.3的一个缺陷。有一个解决办法。 这将影响Spark版本2.4.5+

火花相关问题:

  • Spark UI存储内存超时增加:

  • Spark中可能存在内存泄漏:


csv文件有多大?根据您的信息,我没有看到您在这个参数中设置了驱动程序内存。@Dennili我描述的行为与CSV大小或驱动程序内存无关。我用小型CSV(2-3M)和大型CSV(200-300M)以及不同的驱动器内存(1G-15G)进行了测试。在给定的代码中,spark使用默认的驱动程序内存,我认为您需要使用spark submit设置驱动程序内存参数。spark submit——例如驱动程序内存10g。@DennisLi您可以在spark submit或spark-defaults.conf中设置驱动程序内存枯萎,我已经在spark-defaults.conf中设置了,但这与问题无关。您解决了这个问题吗?我面临类似的问题