答案 0 :(得分:10)
注意:您使用非常非常旧且当前不受支持的Spark 1.5.2(我在发布答案后注意到了),我的回答是关于Spark 1.6 +。
存储内存的工具提示可以全部说明:
使用的内存/用于存储内存中缓存的RDD分区等数据的总可用内存。
它是SPARK-10000: Consolidate storage and execution memory management中引入的统一内存管理功能的一部分(引用逐字):
Spark中的内存管理目前分为两个不相交的区域:一个用于执行,一个用于存储。这些区域的大小在应用期间是静态配置和固定的。
这种方法有几个局限性。它需要用户专业知识来避免不必要的溢出,并且没有适用于所有工作负载的合理默认值。作为Spark用户,我希望Spark更智能地管理内存,因此我不需要担心如何静态分区执行(shuffle)内存分数和缓存内存分数。更重要的是,不使用缓存的应用程序仅使用堆空间的一小部分,导致性能欠佳。
相反,我们应该统一这两个区域,如果可能的话,让我们从另一个区域借用。
您可以使用spark.driver.memory
或spark.executor.memory
Spark属性来控制存储内存,这些属性为Spark应用程序(驱动程序和执行程序)设置整个内存空间,区域由{{1 }和spark.memory.fraction
。
您应该考虑由作者Andrew Or观看幻灯片Memory Management in Apache Spark,并由作者本人(再次)观看视频Deep Dive: Apache Spark Memory Management。
您可能想要了解如何在How does web UI calculate Storage Memory (in Executors tab)?
中计算存储内存值(在Web UI和内部)