spark的計算引擎主要包括執行記憶體和shuffle兩部分
執行記憶體主要包括執行記憶體、任務記憶體管理器(taskmemorymanager)、記憶體消費者(memorycosumer)等內容。執行記憶體包括在jvm堆上進行分配的執行記憶體池(executionmemorypool)和在作業系統的記憶體中進行分配的tungsten。記憶體管理器將提供api對執行記憶體和tungsten進行管理(包括申請記憶體、釋放記憶體等)。因為同一節點上能夠執行多次任務嘗試,所以需要每一次任務嘗試都有單獨的任務記憶體管理器為其服務。任務嘗試通過任務記憶體管理器與記憶體管理器互動,以申請任務嘗試所需要的執行記憶體,並在任務嘗試結束後釋放使用的執行記憶體。一次任務嘗試過程中會有多個元件需要使用執行記憶體,這些元件統稱為記憶體消費者。記憶體消費者多種多樣,有對map任務的中間輸出資料在jvm堆上進行快取、聚合、溢位、持久化等處理的externalsorter,也有在作業系統記憶體中進行快取、溢位、持久化處理的shuffleexternalsorter,還有將key/value對儲存到連續的記憶體塊中的rowbasedkeyvaluebatch。消費者需要的執行記憶體都是向任務記憶體管理器所申請的。從執行記憶體的角度來看,計算引擎的整體架構如下圖所示:
下面先來看看mapreduce計算框架的shuffle過程:
在早期spark版本中,shuffle如下圖所示:
步驟如下:
spark早期版本的shuffle過程存在以下問題:
hadoop mapreduce的shuffle過程存在以下問題:
為了解決以上mapreduce和早期spark的shuffle過程中的效能問題,目前spark已經對shuffle做了多種效能優化,主要解決方法如下:
Spark計算引擎原理
一 spark內部原理 通過rdd,建立dag 邏輯計畫 為dag生成物理查詢計畫 呼叫並執行task 二 生成邏輯執行圖 產生rdd 生成rdd的dag圖。三 生成邏輯執行圖 rdd之間關係 依賴關係分為兩類。完全依賴前面的partition只對應後面的乙個partition,不會是多個。重點關注...
spark記憶體概述
spark程序是以jvm程序執行的,可以通過 xmx和 xms配置堆疊大小,它是如何使用堆疊呢?下面是spark記憶體分配圖。spark預設jvm堆為512mb,為了避免oom錯誤,只使用90 通過spark.storage.safetyfraction來設定。spark通過記憶體來儲存需要處理的資...
Spark 概述 安裝
spark core 實現了 spark 的基本功能,包含任務排程 記憶體管理 錯誤恢復 與儲存 系統互動等模組。spark core 中還包含了對彈性分布式資料集 resilient distributed dataset,簡稱 rdd 的 api 定義。spark sql 是 spark 用來操...