問題出現的原因
資料傾斜的表現
資料傾斜的表現
遇到這種方式問題莫慌看思路
問題:資料傾斜會導致資料溢位,可能是其中的某個task分配了大量的資料,執行出錯,導致資料傾斜,資料溢位.
1.方案一:聚合源資料
只針對常見的聚合操作的情況
2.方案二:使用過濾的方法
只針對只使用部分資料的情況
3.方案三:提高task的並行度的方法
資料量大且資料任務多的程式慎用
4.方案四:使用隨機key方式
groupbykey、reducebykey 比較適合使用這種方式
5.方案五:將reduce join轉換為map join
適合小表的記憶體可以存在集群的記憶體的時候
問題:資料傾斜會導致資料溢位,可能是其中的某個task分配了大量的資料,執行出錯,導致資料傾斜,資料溢位.
問題出現的原因
當我們在集群跑任務的時候,同乙個key的values,一定是分配到乙個reduce task中處理的,
當我們執行多個key對應的values,例如總共是100萬個數量,其中乙個key對應了了90萬條資料,
兩個key對應了1萬條資料,剩下的key平分了剩下的9萬條資料,這種情況下就會產生資料傾斜,
平分9萬的key執行完花了1分鐘,執行1萬的兩個key執行了10分鐘,執行90萬資料的那個key就
會執行10290=1800分鐘=30個小時=1天多,
大家可以發現資料傾斜就是乙個殺手,會不會殺了你但是會用時間拖死你!
資料傾斜的表現
1.你用client模式執行的時候,task執行成功的日誌跳的異常的慢,乙個task要執行乙個小時誇
慢,像小牛拉大車一樣,但是資料至少還能跑.
2.報錯 (1
)oom
(outofmenory) 資料溢位,(2
)task failed
(任務失敗)
,task lost
(任務迷失)
,resubmitting task
(任務重啟)反覆執行幾次都跑不通,最終因為(longtime)任務超時而掛掉,
程式因為資料傾斜引發的一系列異常,最終程式掛掉!
遇到這種方式問題莫慌看思路
解決思路:
1.根據log資訊去定位出現資料傾斜的原因,首要原因就是因為shuffle,某個task承擔了絕大多數的任務,
那哪些地方會產生shuffle呢?groupbykey、countbykey、reducebykey、join一般就是這幾個運算元不老實,
2.log一般會報是在你的哪一行的**,導致了oom異常,或者看看是執行到了第幾個stage
(階段)
哪乙個stage
(階段)生成的task特別慢,就用你的肉眼去對**進行stage
(階段)劃分看看到底**發生了資料傾斜.
1.方案一:聚合源資料
只針對常見的聚合操作的情況
思路:
說白了我們要處理的資料倉儲就是hive中的一堆表,這一堆表儲存在hdfs
(分布是儲存系統)中我們一般就是凌晨跑
昨天一天所產生的資料,這些資料發生了資料傾斜,我們首要的看日誌,肉眼分析階段,肉眼分析是不是groupbykey,
reducebykey等函式在聚合過程中產生的shuffle次數過多導致的資料傾斜,聚合資料來源,就是提前聚合,找一種沒有
sheffle的方式提前聚合,然後再切分還原資料本真,類似先列轉行(偽轉)聚合合理逃避sheffle,然後再map行轉
列(偽轉)恢復資料的本真!
1.另外在資料還沒有進入spark之前,寫乙個hive的sql指令碼,將value值提前合併,那麼就可以直接對資料進行map操作,不需要groupby操作了就沒有了shuffle了 就不會有資料傾斜的問題了
2.增大資料的粒度 就是減少了value的資料量 這樣也可以有效的減少資料傾斜的問題
2.方案二:使用過濾的方法
只針對只使用部分資料的情況
根據業務的需求 過濾掉不重要的資料
3.方案三:提高task的並行度的方法
資料量大且資料任務多的程式慎用
增加task的數量,減少每個task執行的資料量
增加並行度的數量 每個task的資料就會有所減少 這種方法治標不治本 有可能會避免記憶體溢位的情況
但資料傾斜的問題還在 就會造成有的task執行快 有的執行慢 浪費整體時間
4.方案四:使用隨機key打散方式
groupbykey、reducebykey 比較適合使用這種方式
在第一輪聚合的時候將同一組的key打散,加上字首字尾等
然後在區域性聚合時恢復key,最後在全域性聚合
5.方案五:將reduce join轉換為map join
適合小表的記憶體可以存在集群的記憶體的時候
(
1)如果有兩個rdd join 其中乙個rdd資料較小時 可以將這個小的rdd廣播出去 這樣再進行map就不會產生shuffle 就不會有資料傾斜(2
)如果資料都很大的情況 記憶體放不下時 不能採用廣播的情況
Spark資料傾斜調優
一 資料傾斜發生的原理 1 確定資料傾斜發生在第幾個stage中。可以通過spark web ui來檢視當前執行到了第幾個stage。並深入看一下當前這個stage各個task分配的資料量及執行時間 2 根據stage劃分原理,推算出來發生傾斜的那個stage對應 中的哪一部分。3 分析一下那個執行...
spark效能調優 資料傾斜
1.資料傾斜發生時的現象 絕大多數task執行得都非常快,但個別task執行極慢。比如,總共有1000個task,997個task都在1分鐘之內執行完了,但是剩餘兩三個task卻要一兩個小時。這種情況很常見。原本能夠正常執行的spark作業,某天突然報出oom 記憶體溢位 異常,觀察異常棧,是我們寫...
Hive調優 資料傾斜
1 通常情況下,作業會通過input的目錄產生乙個或者多個map任務。主要的決定因素有 input的檔案總個數,input的檔案大小,集群設定的檔案塊大小 目前為128m,可在hive中通過set dfs.block.size 命令檢視到,該引數不能自定義修改 2 舉例 a 乙個大檔案 假設inpu...