56 Spark效能優化之廣播共享資料

2021-09-10 02:33:16 字數 820 閱讀 3856

廣播共享資料原理.png

如果你的運算元函式中,使用到了特別大的資料,那麼,這個時候,推薦將該資料進行廣播。這樣的話,就不至於將乙個大資料拷貝到每乙個task上去。而是給每個節點拷貝乙份,然後節點上的task共享該資料。

這樣的話,就可以減少大資料在節點上的記憶體消耗。並且可以減少資料到節點的網路傳輸消耗。

比如val table = new array[string](1000000) 資料量很大

比如,想效仿mapruduce的map端join,就是說再每個task執行的時候,要去把輸入的資料與乙個表進行join,其實可以再執行job之前,先把表中資料讀取出來,載入到driver上,變成集合,然後再運算元函式中,使用,進行join

此時,這個join的表,很可能是比較大的,比如說100m

var rdd = rdd.foreach(ele => ele ... table)

這種情況下,運算元函式使用到了外部的資料,預設的情況下,運算元函式使用到的外部資料,會被拷貝到每乙個task中,此時,如果使用到的外部資料量很大的情況下,會在各個節點上,占用很大的記憶體,而且會產生大量的網路資料傳輸,大量網路資料的傳輸造成效能的開銷

比如說,共享的資料是100m,6個task,就會占用600m的資料

val broadtable = sc.broadcast(table)

rdd.foreach(ele => ele ... broadtable)

這樣的話,就可以大大減少每個節點的記憶體消耗,並且可以減少網路資料傳輸的效能消耗

Spark優化之廣播共享資料

目錄 一 廣播變數 broadcast variable 二 例子 三 廣播的變數是存放在哪?唯讀屬性,每個節點拷貝 好處 節省了記憶體的消耗,節省流量的消耗 每個節點上可能有 100 個 task 廣播前 val myconf new myconfiguration 配置檔案很大,100m val...

Spark效能優化之Shuffle效能調優

一 shuffle效能調優 1,問題 shuffle output file lost?真正的原因是gc導致的!如果gc尤其是full gc產生通常會導致執行緒停止工作,這個時候下乙個stage的task在預設情況下就會嘗試重試來獲取資料,一般重試3次每次重試的時間為5s,也就是說預設情況下15s內...

spark效能調優之廣播大變數

廣播變數 廣播變數允許程式設計師將乙個唯讀的變數快取在每台機器上,而不用在任務之間傳遞變數。廣播變數可被用於有效地給每個節點乙個大輸入資料集的副本。spark還嘗試使用高效地廣播演算法來分發變數,進而減少通訊的開銷。spark的動作通過一系列的步驟執行,這些步驟由分布式的洗牌操作分開。spark自動...