您好,登錄后才能下訂單哦!
本篇內容介紹了“spark數據本地性實例分析”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
場景:
Spark在Driver上,對Application的每一個stage的task,進行分配之前,都會計算出每個task要計算的是哪個分片數據,RDD的某個partition;Spark的task分配算法,優先,會希望每個task正好分配到它要計算的數據所在的節點,這樣的話,就不用在網絡間傳輸數據;但是呢,通常來說,有時,事與愿違,可能task沒有機會分配到它的數據所在的節點,為什么呢,可能那個節點的計算資源和計算能力都滿了;所以呢,這種時候,通常來說,Spark會等待一段時間,默認情況下是3s鐘(不是絕對的,還有很多種情況,對不同的本地化級別,可以設置不同的等待時長),默認重試5次,到最后,實在是等待不了了,就會選擇一個比較差的本地化級別,比如說,將task分配到靠它要計算的數據所在節點,比較近的一個節點,然后進行計算。
但是對于第二種情況,通常來說,肯定是要發生數據傳輸,task會通過其所在節點的BlockManager來獲取數據,BlockManager發現自己本地沒有數據,會通過一個getRemote()方法,通過TransferService(網絡數據傳輸組件)從數據所在節點的BlockManager中,獲取數據,通過網絡傳輸回task所在節點。
對于我們來說,當然不希望是類似于第二種情況的了。最好的,當然是task和數據在一個節點上,直接從本地executor的BlockManager中獲取數據,純內存,或者帶一點磁盤IO;如果要通過網絡傳輸數據的話,那么實在是,性能肯定會下降的,大量網絡傳輸,以及磁盤IO,都是性能的殺手。
如果可以從數據所在的位置拿到數據,那就是最佳情況,直接在一個executor進程內,走內存速度最佳如果數據所在的機器資源被占用,超過3秒,就會放到離數據近的其他機器上面去,那樣Task任務會找它自己本地的BlockManager要數據,沒有就會通過BlockManager來管附近的BlockManager就是數據所在機器的要數據,可能不在一個節點,要走網絡傳輸,當然你要是說倆個executor都在一個節點里面,那這種情況,也還算不錯,就在一個節點,走進程間數據傳輸即可
還有一種情況,最差的就是這種跨機架拉取數據的方式了。速度非常慢,對性能的影響,相當大。
spark里面數據本地化級別都有哪幾種?
PROCESS_LOCAL:進程本地化,代碼和數據在同一個進程中,也就是在同一個executor中;計算數據的task由executor執行,數據在executor的BlockManager中,性能最好。
NODE_LOCAL:節點本地化,代碼和數據在同一個節點中;比如說,數據作為一個HDFS block塊,就在節點上,而task在節點上某個executor中運行;或者是,數據和task在一個節點上的不同executor中,數據需要在進程間進行傳輸
NO_PREF:對于task來說,數據從哪里獲取都一樣,沒有好壞之分,比如從數據庫中獲取數據
RACK_LOCAL:機架本地化,數據和task在一個機架的兩個節點上,數據需要通過網絡在節點之間進行傳輸;
ANY:數據和task可能在集群中的任何地方,而且不在一個機架中,性能最差。
spark.locality.wait,默認是3s
我們什么時候要調節這個參數?
觀察日志,spark作業的運行日志,推薦大家在測試的時候,先用client模式,在本地就直接可以看到比較全的日志。日志里面會顯示,starting task。。。,PROCESS LOCAL、NODE LOCAL觀察大部分task的數據本地化級別。
如果大多都是PROCESS_LOCAL,那就不用調節了;如果是發現,好多的級別都是RACK_LOCAL、ANY,那么最好就去調節一下數據本地化的等待時長調節完,應該是要反復調節,每次調節完以后,再來運行,觀察日志看看大部分的task的本地化級別有沒有提升;看看,整個spark作業的運行時間有沒有縮短,你別本末倒置,本地化級別倒是提升了,但是因為大量的等待時長,spark作業的運行時間反而增加了,那就還是不要調節了
怎么調節?
spark.locality.wait,默認是3s;6s,10s 默認情況下,下面3個的等待時長,都是跟上面那個是一樣的,都是3s spark.locality.wait.process spark.locality.wait.node spark.locality.wait.rack new SparkConf().set("spark.locality.wait", "10")
“spark數據本地性實例分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。