我有一个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分配了多少内存?