Spark中的記憶體計算是什麼?
導讀 | 由於計算的融合只發生在 Stages 內部,而 Shuffle 是切割 Stages 的邊界,因此一旦發生 Shuffle,記憶體計算的程式碼融合就會中斷。 |
在 Spark 中,記憶體計算有兩層含義:
- 第一層含義就是眾所周知的分散式資料快取;
- 第二層含義是 Stage 內的流水線式計算模式,透過計算的融合來大幅提升資料在記憶體中的轉換效率,進而從整體上提升應用的執行效能;
那 Stage 內的流水線式計算模式到底長啥樣呢?在 Spark 中,流水線計算模式指的是:在同一 Stage 內部,所有運算元融合為一個函式,Stage 的輸出結果,由這個函式一次性作用在輸入資料集而產生。
我們用一張圖來直觀地解釋這一計算模式。
在上面的計算流程中,如果你把流水線看作是記憶體,每一步操作過後都會生成臨時資料,如圖中的 clean 和 slice,這些臨時資料都會快取在記憶體裡。
但在下面的記憶體計算中,所有操作步驟如 clean、slice、bake,都會被捏合在一起構成一個函式。這個函式一次性地作用在“帶泥土豆”上,直接生成“即食薯片”,在記憶體中不產生任何中間資料形態。
由於計算的融合只發生在 Stages 內部,而 Shuffle 是切割 Stages 的邊界,因此一旦發生 Shuffle,記憶體計算的程式碼融合就會中斷。但是,當我們對記憶體計算有了多方位理解以後,就不會一股腦地只想到用 cache 去提升應用的執行效能,而是會更主動地想辦法儘量避免 Shuffle,讓應用程式碼中儘可能多的部分融合為一個函式,從而提升計算效率。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2778484/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 什麼是Java記憶體模型(JMM)中的主記憶體和本地記憶體?Java記憶體模型
- 隱私計算是什麼
- hive on spark記憶體模型HiveSpark記憶體模型
- 詳解JVM中的記憶體模型是什麼?JVM記憶體模型
- Spark學習——記憶體管理Spark記憶體
- Java記憶體模型是什麼,為什麼要有Java記憶體模型,Java記憶體模型解決了什麼問題?Java記憶體模型
- Linux 中的“大記憶體頁”(hugepage)是個什麼?Linux記憶體
- MongoDB 如何使用記憶體?為什麼記憶體滿了?MongoDB記憶體
- MongoDB如何使用記憶體?為什麼記憶體滿了?MongoDB記憶體
- Java記憶體模型FAQ(一) 什麼是記憶體模型Java記憶體模型
- 什麼才算是真正的程式設計能力?程式設計
- [譯].Net中的記憶體-什麼分配在了哪裡記憶體
- 邊緣計算是什麼以及為什麼需要它
- Python如何管理記憶體?記憶體分配機制是什麼?Python記憶體
- 什麼是Java記憶體模型?Java記憶體模型
- 什麼是Java記憶體模型Java記憶體模型
- spark 原始碼分析之十五 -- Spark記憶體管理剖析Spark原始碼記憶體
- Java記憶體模型FAQ(五)舊的記憶體模型有什麼問題?Java記憶體模型
- JS中的棧記憶體、堆記憶體JS記憶體
- Spark效能優化:診斷記憶體的消耗Spark優化記憶體
- 在Linux中,什麼是虛擬記憶體?它是如何工作的?Linux記憶體
- spark 原始碼分析之十六 -- Spark記憶體儲存剖析Spark原始碼記憶體
- 什麼索引算是好的索引索引
- 虛擬記憶體有什麼用 虛擬記憶體不足怎麼解決記憶體
- 雲端計算是什麼?雲端計算的發展趨勢是什麼?
- Python記憶體檢視是什麼Python記憶體
- 多維分析的本質計算是什麼?能做什麼又不能做什麼?
- SQL Server為什麼這麼耗記憶體SQLServer記憶體
- [譯] WebAssembly中的記憶體(為什麼它比你想象的更安全)Web記憶體
- 什麼是伺服器記憶體?如何選擇伺服器記憶體?伺服器記憶體
- 為什麼 Linux 需要虛擬記憶體Linux記憶體
- Linux中的管道是什麼?管道與共享記憶體的區別有哪些?Linux記憶體
- go中的記憶體逃逸Go記憶體
- javascript中的記憶體管理JavaScript記憶體
- 記憶體條的PCB是個啥? 宏旺半導體告訴你什麼樣的記憶體條好記憶體
- 記憶體條頻率越高越好嗎 記憶體條頻率高了有什麼用記憶體
- 電腦記憶體XMP是什麼意思?電腦記憶體XMP模式的作用與開啟教程記憶體模式
- spark 原始碼分析之二十二-- Task的記憶體管理Spark原始碼記憶體