資料傾斜的解決方案

2021-10-08 10:46:34 字數 2301 閱讀 1701

目錄

方案一 硬編碼

方案二 map join

方案1:硬編碼,將傾斜的值打散。

方案2:map join

背景:多張表在進行關聯時,可能有乙個key的值非常多,導致某個reduce處理時間過久,此時產生了資料傾斜。

方案1是用拆分空值和總量較多的key值進行優化。

舉例:table 2和table 1關聯,key為ucid,table 2 的ucid非常隨機,且有一兩條ucid為-911的資料,總體沒有傾斜。

table1的資料中有許多ucid=-911的資料,假如說是1000w條,那麼在關聯的時候肯定會出現資料傾斜。

先判斷這部分key值是否實際有用,如果沒有用,直接轉換成隨機值,將資料打散。

關聯條件為:

on if(table1.ucid=-911,rand(),table1.ucid) = table2.ucid

如果-911的資料是有用的,則需要做其它處理。

在table1中將-911的資料進行「**」處理:

if(table1.ucid=-911,concat(table1.ucid,'_',pmod(ceil(rand()*1000000),10)),table1.ucid) as table1.ucid
對table2中-911的資料進行「翻倍」處理:

select

ucid

from

table2

--關聯值-911擴充套件10倍

union

select '-911_0' as ucid

union

select '-911_1' as ucid

union

select '-911_2' as ucid

union

select '-911_3' as ucid

union

select '-911_4' as ucid

union

select '-911_5' as ucid

union

select '-911_6' as ucid

union

select '-911_7' as ucid

union

select '-911_8' as ucid

union

select '-911_9' as ucid

然後進行關聯

(

select

ucid

from

table1

)aleft join

( select

ucid

from

table2

--關聯值-911擴充套件10倍

union

select '-911_0' as ucid

union

select '-911_1' as ucid

union

select '-911_2' as ucid

union

select '-911_3' as ucid

union

select '-911_4' as ucid

union

select '-911_5' as ucid

union

select '-911_6' as ucid

union

select '-911_7' as ucid

union

select '-911_8' as ucid

union

select '-911_9' as ucid

)bon a.ucid=b.ucid

關聯之後別忘記在最外層將table1的ucid還原回來喔(如果要使用的話)

這種方案屬於硬編碼,只能針對特定的情況進行處理。

將table2作為小表進行map join。

設定引數:

set hive.auto.convert.join=true;

set hive.auto.convert.join.noconditionaltask.size = 30000000;(可根據實際情況設定)

如果table2過大,則做列裁剪。

這樣及時table1有幾千萬條-911的資料,也是在map端就能關聯完,不會涉及到shuffle到reduce上進行處理。

這種方法比較通用,不用做太多處理,且如果table2需要關聯多次,則可以將table2作為臨時表處理。

資料傾斜解決方案

資料傾斜定義 簡單的講,資料傾斜就是我們在資料計算的時候,由於資料的分散度不夠,導致大量的資料集中到了一台或者幾台機器上計算,這些機器的計算速度遠遠低於整個集群的平均計算速度,導致整個計算過程十分緩慢。常見資料傾斜現象 資料傾斜往往會發生在資料開發的各個環節中,比如 用hive資料計算的時候redu...

資料傾斜解決方案

1 聚合原資料 主要操作的是hive資料庫中的資料,先通過hive sql將相同key的資料聚合成一條資料,再進行map操作 當沒辦法聚合成一條資料時 增大key粒度,從而key的數量會減少,但是每個key對應的資料量會增大,key之間的資料量差異可能會減少。2 過濾導致傾斜的key 3 提高shu...

MR資料傾斜解決方案

1.資料傾斜 由於mapreduce程式是按照key的hash值進行分割槽的 如果某些單詞特別多 特別多的單詞就會被分到同乙個reduce去處理 有些reducere任務處理的資料量小 有些reduce任務處理的資料量非常大 只有所有的reduce任務完成以後job才算完成 造成job的工作時間變長...