您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關大數據中Spark數據傾斜表現及解決方案是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
Spark數據傾斜表現
Spark引擎的大部分task執行時間比較一致,但是存在一些task的執行時間特別長,例如,500個task,其中498個執行較快,10分鐘執行完成,剩余的兩個task需要執行半個小時以上。
例行化執行的代碼,某一天發生OOM問題,大概率是有數據傾斜了。
數據傾斜產生的原因是:shuffle的時候,需要將各個節點的相同的key拉取到同一個節點上,如果這個key對應的數據量非常大的時候,就會發生數據傾斜。
數據傾斜只會發生在shuffle過程中,Spark引擎會觸發Shuffle的RDD算子有:distinct、repartition、reduceByKey、groupByKey、aggregateByKey、join
需要Shuffle的操作算子上直接設置并行度或者使用spark.default.parallelism設置。如果是Spark SQL,還可通過SET spark.sql.shuffle.partitions=num_tasks設置并行度。
該方法使用場景少,只能緩解數據傾斜,不能徹底解決數據傾斜。
通過Spark的Broadcast機制,將Reduce Join轉化為Map Join,避免Shuffle,從而完全消除Shuffle帶來的數據傾斜。
參與Join的一側數據集足夠小,并且主要適用于Join的場景,不適合聚合的場景,適用條件有限。
通過Spark的reduceByKey,統計每一個key的數量,超過指定數量的key或者數量top的key,作為異常key。當然也可以使用Sample對RDD進行抽樣后,進行key的統計。
該方法的特點是:簡單、粗暴,有一定的適用場景。
這個可以理解為大招
對于單個RDD的Shuffle操作,如groupByKey,將key值加上一個隨機數的前綴。這樣就需要執行二次聚合操作。
對于多個RDD的Shuffle操作,如join,將其中的一個有明顯數據傾斜的RDD的key,加上n以內的隨機數的前綴,另一個RDD的每一個key,都加上0-n的前綴,相當于RDD膨脹了n倍。
實際場景中可能需要上述方案的組合操作,比如:異常值過濾 + key值轉換:加隨機數,可以進行性能的優化:根據異常值,對RDD進行拆分:分別拆分成兩個RDD,對于沒有數據傾斜的,正常操作。對于有數據傾斜的加上隨機前綴,再進行Shuffle操作。
看完上述內容,你們對大數據中Spark數據傾斜表現及解決方案是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。