眾所周知,shuffle是整個大資料框架的心臟,是整個奇蹟發生的地方,當然,問題也就發生在shuffle這裡,資料傾斜是經常發生在這裡。這裡主要討論的就是和資料傾斜相關的解決方案。資料傾斜就是由於資料分布不均勻,資料大量集中到一點上,造成資料熱點。大多數情況下,分為一下三種情況:
map端執行比較快,reduce執行很慢,因為partition造成的資料傾斜。
某些reduce很快,某些reduce很慢,也是因為partition造成的資料傾斜。
某些map執行很快,某些map執行很慢,這是因為資料本身的分布的不合理性造成的。
造成上面reduce和map任務執行很緩慢本質上就兩種情況,第一:reduce緩慢是因為partition造成滴。第二:map端緩慢是因為資料本身的分布不合理性。下面介紹map緩慢和reduce緩慢
reduce緩慢:兩個table的join操作會造成資料傾斜,會造成reduce緩慢,這個相對比較好解決,我們不是有三種解決join效能的方案嗎?mapjoin,common join,smbjoin可以解決資料傾斜。另外,有些情況下造成的reduce緩慢無法解決,因為資料本身也不是服從均勻分布。大多數還是高斯分布。
reduce效能本質上是由於groupby操作導致的,而count(distinct)內部本質也是有groupby實現
map端緩慢:這種情況是由於每條資料的相對位置造成的。有兩種方案:
第一:設定在map端聚合,set hive.map.aggr=true 可以減小壓力(預設開啟)
第二:可以set hive.groupby.skewindata=true(預設關閉),此時hive的執行在mr後台會存在兩個map乙個reduce,第乙個map本質上就是先對資料進行shuffle,第二個map就可以對shuffle之後的資料進行操作。
Hive資料傾斜解決
什麼是資料傾斜?簡單來說資料傾斜就是資料的key的分化嚴重不均,造成一部分資料很多,一部分資料很少的局面。資料傾斜產生的原因是什麼?舉個 word count 的入門例子,它的map 階段就是形成 aaa 1 的形式,然後在reduce 階段進 行 value 相加,得出 aaa 出現的次數。若進行...
Hive解決資料傾斜問題
簡單來說資料傾斜就是資料的key 的分化嚴重不均,造成一部分資料很多,一部分資料很少的局面。舉個 word count 的入門例子,它的map 階段就是形成 aaa 1 的形式,然後在reduce 階段進行 value 相加,得出 aaa 出現的次數。若進行 word count 的文字有100g,...
Hive解決資料傾斜問題
什麼是資料傾斜以及資料傾斜式怎麼產生的?簡單來說資料傾斜就是資料的key的分化嚴重不均,造成一部資料很多,一部分資料很少的局面。舉個 word count 的入門例子,它的map 階段就是形成 aaa 1 的形式,然後在reduce 階段進行 value 相加,得出 aaa 出現的次數。若進行 wo...