天天看點

嘴說手畫Spark的記憶體模型一,記憶體模型二,配置項

一,記憶體模型

Spark的記憶體模型如下圖所示:

嘴說手畫Spark的記憶體模型一,記憶體模型二,配置項
  • Reserved Memory 固定為 300MB,不受開發者控制,是啟動Spark架構本身所需要的記憶體空間
  • UserMemory 是使用者空間,即使用者定義的資料,通常是使用者在代碼中定義的變量,可以說,除RDD、廣播、全局變量、計算過程中産生的資料之外都是使用者定義的資料
  • Execution Memory 執行計算任務所需要的記憶體,如源資料加載占用的是這部分記憶體,以及在計算過程中産生的中間資料使用的記憶體都是這部分記憶體
  • Storage Memory 緩存、廣播、全局變量使用這部分記憶體

PS:在記憶體不夠時,Spark是報OOM還是把部分資料溢出到檔案中?

在兩個場景下,會有溢出到檔案,一是RDD的cache,二是shuffle的中間資料。其他場景下,如果記憶體不足,會導緻OOM錯誤。

二,配置項

嘴說手畫Spark的記憶體模型一,記憶體模型二,配置項
  • spark.executor.memory 是絕對值,它指定了 Executor 程序的 JVM Heap 總大小。
  • spark.memory.fraction 标記 Spark 處理分布式資料集的記憶體總大小,這部分記憶體包括 Execution Memory 和 Storage Memory 兩部分。如上圖所示,表示第一層記憶體占用的大小
  • spark.memory.storageFraction 區分 Execution Memory 和 Storage Memory 的初始大小,辨別第一層劃分的兩部分各自占用的比例

繼續閱讀