1)聚合原資料(主要操作的是hive資料庫中的資料,先通過hive sql將相同key的資料聚合成一條資料,再進行map操作)
當沒辦法聚合成一條資料時:增大key粒度,從而key的數量會減少,但是每個key對應的資料量會增大,key之間的資料量差異可能會減少。
2)過濾導致傾斜的key
3)提高shuffle操作中的reduce並行度(reducebykey(200)傳入並行度引數)
對於sparksql中的shuffle類語句,比如group by ,join等需要設定乙個引數,即spark.sql.shuffle.partitions,該引數代表了shuffle read task的並行度,預設是200,增加shuffle read task 的數量,可以讓原本分配給乙個task的多個key分配給多個task,從而讓每個task處理比原先更少的資料(缺點:只能緩解,並不能從根本上消除)
4)使用隨機數key實現雙重聚合(新增隨機數,將相同key打散聚合,去掉隨機數再聚合一次)
5)reduce join轉換成map join(適合兩個rdd資料量相差比較大的,將小資料量的rdd廣播出去,將小rdd collect到driver端,廣播出去)
6)sample取樣對傾斜key單獨進行join(適用於只有乙個key的,將其單獨進行join,另一部分進行join,最後union合併)
【注:在spark中,如果某個rdd只有乙個key,那麼在shuffle過程中會預設將此key對應的資料打散,由不同的reduce端task進行處理】
7)適用隨機數以及擴容進行join(多個傾斜的key,乙個rdd新增隨機數,另乙個rdd擴容相應的個數)(只能緩解,不能根本消除,會造成資料量急劇增大)
資料傾斜解決方案
資料傾斜定義 簡單的講,資料傾斜就是我們在資料計算的時候,由於資料的分散度不夠,導致大量的資料集中到了一台或者幾台機器上計算,這些機器的計算速度遠遠低於整個集群的平均計算速度,導致整個計算過程十分緩慢。常見資料傾斜現象 資料傾斜往往會發生在資料開發的各個環節中,比如 用hive資料計算的時候redu...
MR資料傾斜解決方案
1.資料傾斜 由於mapreduce程式是按照key的hash值進行分割槽的 如果某些單詞特別多 特別多的單詞就會被分到同乙個reduce去處理 有些reducere任務處理的資料量小 有些reduce任務處理的資料量非常大 只有所有的reduce任務完成以後job才算完成 造成job的工作時間變長...
資料傾斜的解決方案
目錄 方案一 硬編碼 方案二 map join 方案1 硬編碼,將傾斜的值打散。方案2 map join 背景 多張表在進行關聯時,可能有乙個key的值非常多,導致某個reduce處理時間過久,此時產生了資料傾斜。方案1是用拆分空值和總量較多的key值進行優化。舉例 table 2和table 1關...