免費的行情網站app網頁推薦企業(yè)網站的域名是該企業(yè)的
數據傾斜是:多個分區(qū)中,某個分區(qū)的數據比其他分區(qū)的數據多的多
數據傾斜導致的問題:
- 導致某個spark任務耗時較長,導致整個任務耗時增加,甚至出現OOM
- 運行速度慢:主要發(fā)生在shuffle階段,同樣的key的數據太多了,導致了某個key所在的task需要處理的數據量太大了,遠超其他的task的處理時間
一條經驗:一般出現運行速度異常慢,或者OOM的主要原因是數據傾斜
數據傾斜的解決方案:
- 過濾不需要的key:有些key是臟數據,直接過濾,降低數據量
- 調整并行度:增大partition的數量,這個每個task要處理的數據量就降低了,各個key可以均勻的分配到多個partition中。但是如果某個key的數據量就是很多,還是會出現數據傾斜
- 將reduce側的join轉化為map側join:如用reduceBykey來替換groupByKey,讓map側也發(fā)生aggr聚合,減少shuffle的數據量
- 隨機前綴擴容:如果某個key就是很多,在此key之前加隨機數,來打散key,然后聚合
- 如果在加載數據時就發(fā)生了數據傾斜,可以在加載后進行repartition
- 對于join數據傾斜,一般是小表join大表,用map join ,避免reduce join(shuffle join)
總結:一般在shuffle時容易發(fā)生數據傾斜,因此主要思路是降低shuffle的量
spark的map join 和reduce join的區(qū)別?
都是將2個數據集進行join連接的操作,但是實現方式不同
- map join:小表join 大表, 將小表通過廣播的方式,廣播到所有excutors節(jié)點的內存中,然后在每個excutor節(jié)點上將大數據和小數據進行連接,這樣可以快速連接,從而提高了join的效率;優(yōu)點:由于將小數據加載到內存中,join的速度很快;缺點:由于數據會加載到內存中,會導致內存溢出的問題。
- reduce join : 大表join大表, 將2個數據集都進行分區(qū),然后將相同的key的數據分發(fā)到同一個節(jié)點上進行連接操作。因為同一個key的數據被分發(fā)到同一個節(jié)點上,所以每個節(jié)點只需要處理一部分數據,從而減少了每個節(jié)點需要處理的數據量,提高了join的效率;優(yōu)點:通過分布式的方式能夠處理大數據集; 缺點:需要進行shuffle網絡傳輸,如果傳輸速度較慢,可能會導致連接操作的效率較低。