Spark中的記憶體計算是什麼?

大雄45發表於2021-06-26
導讀 由於計算的融合只發生在 Stages 內部,而 Shuffle 是切割 Stages 的邊界,因此一旦發生 Shuffle,記憶體計算的程式碼融合就會中斷。

Spark中的記憶體計算是什麼?Spark中的記憶體計算是什麼?

在 Spark 中,記憶體計算有兩層含義:

  • 第一層含義就是眾所周知的分散式資料快取;
  • 第二層含義是 Stage 內的流水線式計算模式,透過計算的融合來大幅提升資料在記憶體中的轉換效率,進而從整體上提升應用的執行效能;
  • 那 Stage 內的流水線式計算模式到底長啥樣呢?在 Spark 中,流水線計算模式指的是:在同一 Stage 內部,所有運算元融合為一個函式,Stage 的輸出結果,由這個函式一次性作用在輸入資料集而產生。

    我們用一張圖來直觀地解釋這一計算模式。

    Spark中的記憶體計算是什麼?Spark中的記憶體計算是什麼?

    在上面的計算流程中,如果你把流水線看作是記憶體,每一步操作過後都會生成臨時資料,如圖中的 clean 和 slice,這些臨時資料都會快取在記憶體裡。

    但在下面的記憶體計算中,所有操作步驟如 clean、slice、bake,都會被捏合在一起構成一個函式。這個函式一次性地作用在“帶泥土豆”上,直接生成“即食薯片”,在記憶體中不產生任何中間資料形態。

    由於計算的融合只發生在 Stages 內部,而 Shuffle 是切割 Stages 的邊界,因此一旦發生 Shuffle,記憶體計算的程式碼融合就會中斷。但是,當我們對記憶體計算有了多方位理解以後,就不會一股腦地只想到用 cache 去提升應用的執行效能,而是會更主動地想辦法儘量避免 Shuffle,讓應用程式碼中儘可能多的部分融合為一個函式,從而提升計算效率。

    原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2778484/,如需轉載,請註明出處,否則將追究法律責任。

相關文章