1. 程式人生 > >Spark:資料本地化(調優)

Spark:資料本地化(調優)

  1. 資料本地化的級別:

PROCESS_LOCAL

task要計算的資料在本程序(Executor)的記憶體中。

NODE_LOCAL

  • task所計算的資料在本節點所在的磁碟上。
  • task所計算的資料在本節點其他Executor程序的記憶體中。

NO_PREF

task所計算的資料在關係型資料庫中,如mysql。

RACK_LOCAL

task所計算的資料在同機架的不同節點的磁碟或者Executor程序的記憶體中

ANY

跨機架。

  1. Spark資料本地化調優:

Spark中任務排程時,TaskScheduler在分發之前需要依據資料的位置來分發,最好將task分發到資料所在的節點上,如果TaskScheduler分發的task在預設3s依然無法執行的話,TaskScheduler會重新發送這個task到相同的Executor中去執行,會重試5次,如果依然無法執行,那麼TaskScheduler會降低一級資料本地化的級別再次傳送task。

如上圖中,會先嚐試1,PROCESS_LOCAL資料本地化級別,如果重試5次每次等待3s,會預設這個Executor計算資源滿了,那麼會降低一級資料本地化級別到2,NODE_LOCAL,如果還是重試5次每次等待3s還是失敗,那麼還是會降低一級資料本地化級別到3,RACK_LOCAL。這樣資料就會有網路傳輸,降低了執行效率。

  1. 如何提高資料本地化的級別?

可以增加每次傳送task的等待時間(預設都是3s),將3s倍數調大, 結合WEBUI來調節:

• spark.locality.wait  

• spark.locality.wait.process

• spark.locality.wait.node

• spark.locality.wait.rack

注意:等待時間不能調大很大,調整資料本地化的級別不要本末倒置,雖然每一個task的本地化級別是最高了,但整個Application的執行時間反而加長。

  1. 如何檢視資料本地化的級別?

         通過日誌或者WEBUI