小趙在測試spark的時候,寫了如下的**:
dolines = sc.textfile("data.txt")
pairs = lines.map(lambda s: (s, 1))
counts = pairs.groupbykey(lambda a, b: a + b)
結果執行時等待了一段時間直接報錯,data.txt檔案較大,小趙對其進行抽樣後結果如下:
data
newname
work
as請分析報錯的原因以及解決方案
報錯是由於資料傾斜導致的
資料傾斜的原因,由於key本身分布不均衡(重要),或者shuffle時的併發度不夠,過多的資料在同乙個task中執行,把executor撐爆。
解決方案(前三點任一)
1)隔離執行,將異常的key過濾出來單獨處理,最後與正常資料的處理結果進行union操作。
2)對key先新增隨機值,進行操作後,去掉隨機值,再進行一次操作:
將原始的 key 轉化為 key + 隨機值(例如random.nextint)
對資料進行 reducebykey(func)
將 key + 隨機值 轉成 key
再對資料進行 reducebykey(func)
3)使用reducebykey 代替 groupbykey,reducebykey已經做過一次merge,節約了記憶體
4)調高shuffle的並行度
Spark 資料傾斜
計算資料時,資料分散度不夠,導致大量資料集中到一台或幾台機器上計算。區域性計算遠低於平均計算速度,整個過程過慢。部分任務處理資料量過大,可能oom,任務失敗,進而應用失敗。1 executor lost driver oom shuffle過程出錯 2 正常執行任務突然失敗 3 單個executor...
spark資料傾斜問題
資料傾斜 加更大記憶體 跟cpu硬體是效能優化的根本之道 一 資料傾斜帶來的致命性後果 1.oom 根本原因資料太多 一般oom都是由於資料傾斜所致,spark基於jvm之上的 2.速度非常慢 二 資料傾斜的基本特徵 1.任務分配不均勻 2.個別task處理過度大量的資料 shuffle過程中遇到同...
Spark之資料傾斜
spark之資料傾斜 1 關於效能調優首先談資料傾斜,為什麼?1 因為如果資料傾斜,其他所有的調優都是笑話,因為資料傾斜主要導致程式跑步起來或者執行狀態不可用。2 資料傾斜最能代表spark水平的地方,spark是分布式的,如果理解資料傾斜說明你對spark執行機制瞭如指掌。2 資料傾斜兩大直接致命...