Spark的數據本地化級別及調優操作


1. 數據本地化的級別:

①     PROCESS_LOCAL

task要計算的數據在本進程(Executor)的內存中。

 

 

②     NODE_LOCAL

a)         task所計算的數據在本節點所在的磁盤上。

b)        task所計算的數據在本節點其他Executor進程的內存中。

 

 

③     NO_PREF

task所計算的數據在關系型數據庫中,如mysql。

 

 

④     RACK_LOCAL

task所計算的數據在同機架的不同節點的磁盤或者Executor進程的內存中

 

 

⑤     ANY

跨機架。

2. 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。這樣數據就會有網絡傳輸,降低了執行效率。

①     如何提高數據本地化的級別?

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

   • spark.locality.wait 

   • spark.locality.wait.process

   • spark.locality.wait.node

   • spark.locality.wait.rack

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

②     如何查看數據本地化的級別?

通過日志或者WEBUI


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM