久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

spark數據本地性實例分析

150次閱讀
沒有評論

共計 2085 個字符,預計需要花費 6 分鐘才能閱讀完成。

本篇內容介紹了“spark 數據本地性實例分析”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

場景:

 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 數據本地性實例分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計2085字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 高平市| 子洲县| 彭州市| 神池县| 南江县| 青州市| 兰溪市| 凭祥市| 奉化市| 观塘区| 广宗县| 汝城县| 通海县| 名山县| 通化市| 咸阳市| 青海省| 林口县| 改则县| 南涧| 宁陵县| 涿鹿县| 佳木斯市| 高台县| 酒泉市| 华池县| 清镇市| 松桃| 阿合奇县| 田林县| 怀仁县| 太湖县| 陆丰市| 泾川县| 岫岩| 固镇县| 嘉定区| 青阳县| 贵南县| 嘉黎县| 随州市|