内存警告中没有足够的空间来缓存rdd

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

我正在运行 Spark 作业,并且收到 没有足够的空间在内存中缓存 rdd_128_17000 警告。然而,在所附文件中,显然只使用了 719.3 G 中的 90.8 G。这是为什么?谢谢!


15/10/16 02:19:41 WARN storage.MemoryStore: Not enough space to cache rdd_128_17000 in memory! (computed 21.4 GB so far)
15/10/16 02:19:41 INFO storage.MemoryStore: Memory use = 4.1 GB (blocks) + 21.2 GB (scratch space shared across 1 thread(s)) = 25.2 GB. Storage limit = 36.0 GB.
15/10/16 02:19:44 WARN storage.MemoryStore: Not enough space to cache rdd_129_17000 in memory! (computed 9.4 GB so far)
15/10/16 02:19:44 INFO storage.MemoryStore: Memory use = 4.1 GB (blocks) + 30.6 GB (scratch space shared across 1 thread(s)) = 34.6 GB. Storage limit = 36.0 GB.
15/10/16 02:25:37 INFO metrics.MetricsSaver: 1001 MetricsLockFreeSaver 339 comitted 11 matured S3WriteBytes values
15/10/16 02:29:00 INFO s3n.MultipartUploadOutputStream: uploadPart /mnt1/var/lib/hadoop/s3/959a772f-d03a-41fd-bc9d-6d5c5b9812a1-0000 134217728 bytes md5: qkQ8nlvC8COVftXkknPE3A== md5hex: aa443c9e5bc2f023957ed5e49273c4dc
15/10/16 02:38:15 INFO s3n.MultipartUploadOutputStream: uploadPart /mnt/var/lib/hadoop/s3/959a772f-d03a-41fd-bc9d-6d5c5b9812a1-0001 134217728 bytes md5: RgoGg/yJpqzjIvD5DqjCig== md5hex: 460a0683fc89a6ace322f0f90ea8c28a
15/10/16 02:42:20 INFO metrics.MetricsSaver: 2001 MetricsLockFreeSaver 339 comitted 10 matured S3WriteBytes values

amazon-web-services amazon-s3 apache-spark rdd
4个回答
7
投票

这很可能是由于

spark.storage.memoryFraction
的配置太低造成的。 Spark 将仅使用分配内存的这一部分来缓存 RDD。

尝试以下任一方法:

  • 增加存储分数
  • rdd.persist(StorageLevel.MEMORY_ONLY_SER)
    通过序列化RDD数据来减少内存使用
  • rdd.persist(StorageLevel.MEMORY_AND_DISK)
    如果达到内存限制,则部分保留到磁盘上。


0
投票

我有一个基于 Spark 的批处理应用程序(带有

main()
方法的 JAR,不是我编写的,我不是 Spark 专家),我在本地模式下运行,没有
spark-submit
spark-shell
spark-defaults.conf
。当我尝试使用 IBM JRE(就像我的一位客户)而不是 Oracle JRE(相同的机器和相同的数据)时,我开始收到这些警告。

由于内存存储是堆的一小部分(请参阅 Jacob 在评论中建议的页面),我检查了堆大小:IBM JRE 使用不同的策略来决定默认堆大小,它太小了,所以我只是添加了适当的

-Xms
-Xmx
参数,问题就消失了:现在批处理在 IBM 和 Oracle JRE 上都可以正常工作。

我知道我的使用场景并不典型,但我希望这可以帮助别人。


0
投票

Pyspark 中,您可以通过增加内存分配来解决此问题。
您可以使用配置 spark.driver.memoryspark.executor.memory:

来设置它
spark = SparkSession.builder 
    .appName("Pandas_on_spark") 
    .config("spark.driver.memory", "4g") 
    .config("spark.executor.memory", "4g") 
    .getOrCreate()
© www.soinside.com 2019 - 2024. All rights reserved.