方法:解決資料傾斜問題
解決方法1. user_id為空的不參與關聯,例如:
1
2
3
4
5
6
7
8
9
select
*
from
log a
join
bmw_users b
on
a.user_id
is
not
null
and
a.user_id = b.user_id
union
all
select
*
from
log a
where
a.user_id
is
null
.
解決方法2 :
1
2
3
4
select
*
from
log a
left
outer
join
bmw_users b
on
case
when
a.user_id
is
null
then
concat(『dp_hive』,rand() )
else
a.user_id
end
= b.user_id;
總結:2比1效率更好,不但io少了,而且作業數也少了。1方法log讀取兩次,jobs是2。2方法job數是1 。這個優化適合無效id(比如-99,』』,null等)產生的傾斜問題。把空值的key變成乙個字串加上隨機數,就能把傾斜的資料分到不同的reduce上 ,解決資料傾斜問題。因為空值不參與關聯,即使分到不同的reduce上,也不影響最終的結果。附上hadoop通用關聯的實現方法(關聯通過二次排序實現的,關聯的列為parition key,關聯的列c1和表的tag組成排序的group key,根據parition key分配reduce。同一reduce內根據group key排序)。
1
Hive解決資料傾斜問題
簡單來說資料傾斜就是資料的key 的分化嚴重不均,造成一部分資料很多,一部分資料很少的局面。舉個 word count 的入門例子,它的map 階段就是形成 aaa 1 的形式,然後在reduce 階段進行 value 相加,得出 aaa 出現的次數。若進行 word count 的文字有100g,...
Hive解決資料傾斜問題
什麼是資料傾斜以及資料傾斜式怎麼產生的?簡單來說資料傾斜就是資料的key的分化嚴重不均,造成一部資料很多,一部分資料很少的局面。舉個 word count 的入門例子,它的map 階段就是形成 aaa 1 的形式,然後在reduce 階段進行 value 相加,得出 aaa 出現的次數。若進行 wo...
怎麼解決資料傾斜問題?
本文面向的讀者是從事資料分析 資料處理 etl 等相關工作的朋友們,相信大家在工作中一定遇到過資料傾斜的問題,讀完本文,你會了解到資料傾斜的定義及其危害 產生的原因及應對措施 常見傾斜場景及解決辦法等知識,相信對你今後處理資料傾斜問題會有一定的幫助。目前流行的大資料相關的計算框架之所以能夠處理大量的...