1. 程式人生 > >SPARK 資料本地化(spark.locality.wait)

SPARK 資料本地化(spark.locality.wait)

1.概念:task在執行前都會獲取資料的分割槽資訊進行分配,總是會優先將其分配到它要計算的資料所在節點,儘可能的減少網路傳輸

2.過程:一般會預設3s,重試5次的去分配,一旦超時失敗,將會選擇一個比上一個本地級別差的級別再一次分配,如果發生了資料傳輸,那麼task首先通過blockmanager獲取資料,如果本地沒有資料,則通過getRemote方法從資料所在節點的blockmanager獲取資料並返回至task所在節點

3.級別

PROCESS_LOCAL:程序本地化,效能最好。指程式碼和資料在同一個程序中,也就是同一個executor中;計算資料的task由executor執行,此時資料在executor的blockmanager裡
NODE_LOCAL:節點本地化。程式碼和資料在同一個節點中,資料儲存為節點的hdfs block資料塊,task在節點的某個executror執行;或者資料和task在同一個節點不同的executor中,資料需要跨程序傳輸

NO_PREF:資料從哪裡獲取都一樣,比如從資料庫中獲取資料,對於task而言沒有區別

RACK_LOCAL:資料和task在一個機架的兩個節點上,資料需要通過網路在節點之間進行傳輸

ANY:資料和task可能在叢集中的任何地方,而且不在一個機架中,效能最差

4.調節:spark.locality.wait引數預設是3s,預設情況下,以下幾個引數都是以spark.locality.wait為預設值,

spark.locality.wait.process
spark.locality.wait.node
spark.locality.wait.rack

實際情況中通過調節不同值達到最優的計算分配效果