spark常規效能調優四 廣播大變數

2021-09-24 08:44:55 字數 724 閱讀 6803

預設情況下,task中的運算元中如果使用了外部的變數,每個task都會獲取乙份變數的複本,這就造成了記憶體的極大消耗。一方面,如果後續對rdd進行持久化,可能就無法將rdd資料存入記憶體,只能寫入磁碟,磁碟io將會嚴重消耗效能;另一方面,task在建立物件的時候,也許會發現堆記憶體無法存放新建立的物件,這就會導致頻繁的gc,gc會導致工作執行緒停止,進而導致spark暫停工作一段時間,嚴重影響spark效能。

假設當前任務配置了20個executor,指定500個task,有乙個20m的變數被所有task共用,此時會在500個task中產生500個副本,耗費集群10g的記憶體,如果使用了廣播變數, 那麼每個executor儲存乙個副本,一共消耗400m記憶體,記憶體消耗減少了5倍。

廣播變數在每個

executor

儲存乙個副本,此

executor

的所有task

共用此廣播變數,這讓變數產生的副本數量大大減少。

在初始階段,廣播變數只在driver中有乙份副本。task在執行的時候,想要使用廣播變數中的資料,此時首先會在自己本地的executor對應的blockmanager中嘗試獲取變數,如果本地沒有,

blockmanager

就會從driver

或者其他節點的

blockmanager

上遠端拉取變數的複本,並由本地的blockmanager進行管理;之後此executor的所有task都會直接從本地的blockmanager中獲取變數。

spark效能調優之廣播大變數

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

spark 效能調優

核心調優引數如下 num executors executor memory executor cores driver memory spark.default.parallelizm spark.storage.memoryfraction spark.shuffle.memoryfractio...

Spark效能調優

日常工作使用spark處理業務問題中不可避免的都會碰到需要對spark的效能進行調優的情況,這裡就介紹一下對spark的效能調優。1.調節記憶體分配 因為在spark中堆記憶體被劃分為兩塊,一塊是給rdd的cache和persist操作rdd資料快取使用的,另一塊是給spark運算元函式使用的,函式...