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

时间:2017-12-02 01:33:16

标签: hadoop apache-spark caching memory emr

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

我的内存不足,Spark告诉我,我的一个执行程序试图使用更多的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 个答案:

答案 0 :(得分:1)

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

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

来自Memory Management

  

spark.memory.storageFraction

     

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