如果某個key下記錄數遠超其他key,在join或group的時候可能會導致某個reduce任務特別慢。可能會導致下面2個問題:
1)某個reduce task,卡在99.9%半天不動
2)任務超時被殺掉
通過時間判斷
如果某個reduce的時間比其他reduce時間長的多。才可以檢視web ui,大部分task在4分鐘之內完成,只有r_000021這個task在30分鐘內還沒完成。
另外注意,這裡面需要排除一種特殊情況。有時候,某個task執行的節點可能有問題,導致任務跑的特別慢。這個時候,mapreduce的推測執行,會重啟乙個任務。如果新的任務在很短時間內能完成,通常則是由於task執行節點問題導致的個別task慢。如果推測執行後的task執行任務也特別慢,那更能說明該task可能會有傾斜問題。
通過任務counter判斷1)通過輸入記錄數
普通的task counter如下:
而task=000021的counter如下,其輸入記錄數是2億4000萬,是其他任務的10幾倍。
2)通過輸出字元數
普通的task counter如下:
而task=000021的counter如下,是其他任務的幾十倍:
【找到對應大key】
一般情況下,hive在做join的時候,會列印join的日誌。我們通過日誌查詢大key。
1)找到任務特別慢的那個task,開啟對應日誌,url類似於:
【確定任務卡住的stage】
1)通過jobname確定stage
一般通過hive的預設jobname會帶上名稱會帶上stage階段,如下為stage-1。
2)如果jobname是自定義的,那可能沒法通過jobname判斷stage。需要借助於任務日誌。找到執行特別慢的那個task,搜尋 「commonjoinoperator: join struct」 。hive在做join的時候,會把join的key列印到日誌中。如下:
上圖中的關鍵資訊是struct
這時候,需要參考該sql的執行計畫。通過參考執行計畫,可以斷定該階段為stage1階段。
這時候,需要參考該sql的執行計畫。通過參考執行計畫,可以斷定該階段為stage1階段。
【確定sql執行**】
確定了執行階段,即stage。通過執行計畫,則可以判斷出是執行哪段**時出現了傾斜。還是從上圖,可以推測出是在執行下面紅框中**時出現了資料傾斜。
HiveQL中如何排查資料傾斜問題
轉 資料傾斜的現象 會導致的問題 可能會導致下面2個問題 1 某個reduce task,卡在99.9 半天不動。如下 2 任務超時被殺掉 reduce處理的資料量巨大,在做full gc的時候,stop the world。導致響應超時,超出預設的600秒,任務被殺掉。報錯資訊 如何判斷 通過時間...
mysql資料傾斜 Hive SQL 資料傾斜總結
在海量資料下的資料查詢中,資料傾斜是乙個很恐怖的場景。常常看似很普通的資料查詢,執行了幾個小時也沒有結果,其原因往往是發生了資料傾斜。如果真對資料傾斜採取相應的解決方法,那麼查詢效率將會大大提高。所以,分析資料傾斜是一件相當有意義的任務。本文總結不同情況下的資料傾斜,並分別給出解決方法。資料傾斜 資...
Hql 資料定義
引數設定 set hive.cli.print.current.db true可以上cli顯示當前的資料庫名稱 可以用like 配合正規表示式查詢相應條件的資料庫名。show database like hji.顯示以hji開頭的資料庫 用create database建立資料庫的時候會在hive....