首页 文章

为缓存的RDD分配了多少内存?

提问于
浏览
2

我有一个5工作节点集群,每个集群有6 GB的内存(Spark执行程序内存设置为4608 GB) .

我一直在耗尽内存,Spark告诉我,我的一个 Actuator 试图使用更多的5.0 GB内存 . 如果每个执行程序获得5 GB的内存,那么我的整个集群之间应该有25 GB的内存 .

ExecutorLostFailure (executor 4 exited caused by one of the running tasks) 
Reason: Container killed by YARN for exceeding memory limits. 5.0 GB of 5.0 
GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.

在我的spark应用程序开始时,当我在Storage选项卡中查看我的一个RDD时(此时它是缓存中唯一的rdd),我看到:

RDD Name    Storage Level                   Cached Partitions   Fraction Cached Size in Memory  Size on Disk
myRDD       Memory Serialized 1x Replicated 20                  100%     3.2 GB 0.0 B

Host    On Heap Memory Usage            Off Heap Memory Usage   Disk Usage
Node 1  643.5 MB (1931.3 MB Remaining)  0.0 B (0.0 B Remaining) 0.0 B
Master  0.0 B (366.3 MB Remaining)      0.0 B (0.0 B Remaining) 0.0 B
Node 2  654.8 MB (1920.0 MB Remaining)  0.0 B (0.0 B Remaining) 0.0 B
Node 3  644.2 MB (1930.6 MB Remaining)  0.0 B (0.0 B Remaining) 0.0 B
Node 4  656.2 MB (1918.6 MB Remaining)  0.0 B (0.0 B Remaining) 0.0 B
Node 5  652.4 MB (1922.4 MB Remaining)  0.0 B (0.0 B Remaining) 0.0 B

这似乎表明每个节点只有大约2.5 GB的可用内存 . 在我的spark应用程序出现内存不足错误之前,存储选项卡也永远不会接近显示25 GB的缓存RDD .

我如何知道为缓存的RDD分配了多少内存?

1 回答

  • 1

    提交作业时,您可以指定参数 spark.memory.storageFraction . 此默认值为0.5 .

    因此,在为执行程序分配5G内存的情况下,2.5G将保留用于缓存,剩余的2.5G将用于执行 .

    Memory Management

    spark.memory.storageFraction对驱逐免疫的存储内存量,表示为spark.memory.fraction预留区域大小的一部分 . 这个越高,执行的工作内存越少,任务可能会更频繁地溢出到磁盘 . 建议将此值保留为默认值 . 有关更多详细信息,请参阅此说明 .

相关问题