Spark效能調優系列 資料本地化

2021-09-29 05:26:42 字數 1243 閱讀 9003

背景:

資料本地化對於spark job效能有著巨大的影響,如果資料以及要計算它的**是一起的,那麼效能當然會非常高。但是如果資料與計算它的**是分開的,那麼其中之一必須到另外一方機器上,通常來說,移動**到其它節點,會比移動資料到**所在的節點上,速度要快的多。

因為**較小,spark也正是基於這個資料本地化的原則來構建task排程演算法的。

資料本地化:資料離計算它的**有多近,基於資料距離**的距離,有幾種資料本地化級別:

1.process_local:程序本地化,效能最佳。資料和計算它的**在同乙個jvm程序中。

2.node_local:節點本地化。資料和計算它的**在乙個節點上,但是不在乙個程序中,比如在不同的executor程序中,或者是資料在hdfs檔案的block中。

3.no_pref:從任何地方訪問資料速度都是一樣,不關心資料的位置。

4.rack_local:資料和計算它的**在乙個機架上。

5.any:資料可能在任意地方,比如其他網路環境內,或者其他機架上,效能最差。

調節引數:

spark.locality.wait:預設是3s。

擴充套件引數(預設值為spark.locality.wait):

spark.locality.wait.process

spark.locality.wait.node

spark.locality.wait.rack

調節一般預設3s,重試5次的分配,如果超時失敗,則下降乙個本地級別重新分配,如果發生資料傳輸,task先從blockmanager獲取資料,若本地沒有資料,則通過getremote方法從資料所在節點blockmanager獲取資料並返回task所在節點。

1.如果task和資料在同乙個jvm中,那麼這個時候效能是最好的。

2.但是如果這個executor已經分配了許多task任務,沒有剩餘資源可以啟動task任務。那麼這時,task的任務排程演算法會選擇等待,具體等待需要多長時間需要我們開發人員進行調優。

3.如果等待一會後,該executor裡有空餘的資源,可以使用,那麼我們就會在裡面啟動task任務,這樣是不是達到了調優的目的。

4.如果等待一會後,依舊沒有空餘資源釋放,那麼這時就會下降乙個級別。比如,這個伺服器上另外乙個executor裡資源是空閒的,那麼就會在另外的executor裡啟動task任務,這時就需要跨程序複製資料。

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運算元函式使用的,函式...

Spark效能調優 JVM調優

通過一張圖讓你明白以下四個問題 1.jvm gc機制,堆記憶體的組成 2.spark的調優為什麼會和jvm的調優會有關聯?因為scala也是基於jvm執行的語言 3.spark中oom產生的原因 4.如何在jvm這個層面上來對spark進行調優 補充 spark程式執行時 jvm堆記憶體分配比例 r...