Hadoop 實現多個數據表的join操作


今天在使用hadoop時遇到一個需求,要將具有一定關系的若干個大表進行合並join,乍看起來比較困難。但是仔細分析了一下,還是可以比較好的解決問題的。況且在海量數據處理中,這是一個非常普遍常見的需求。因此寫下來和大家分享一下。如果哪為仁兄看后有更好的辦法,咱們也可以切磋一下。歡迎拍磚,哈哈。

下面描述一下需求,有如下兩種數據

數據A

key value1 value2 value3...valuen

數據B

value1 a1 a2 a3....an

value2 b1 b2 b3....bn

...

valuen x1 x2 x3...xn

目標數據

key value1 a1 a2 a3...an value2 b1 b2 b3...bn....valuen x1 x2 x3...xn

也就是要把所有的數據集合並在一行。當然,所有的數據都是海量的,上TB的數據,顯然無法單機進行合並。於是本人想了個辦法,在hadoop集群上使用兩輪mapreduce完成,下面附上方法,歡迎拍磚。

第一輪的map

使用valuen做為key,紅色為key, 整行數據作為value,即

value1 1 key value1 value2 value3...valuen

value2 1 key value1 value2 value3...valuen

...

valuen 1 key value1 value2 value3...valuen

value1 2 a1 a2 a3....an

value2 2 b1 b2 b3....bn

...

valuen 2 x1 x2 x3...xn

第一輪reduce

經過map階段,標准輸入數據應該是下面的格式。(為什么就不用我說了吧,如果大家不明白,建議先看一下mapreduce的機制,可以參見之前的文章)

value1 1 key value1 value2 value3...valuen

value1 2 a1 a2 a3....an

value2 1 key value1 value2 value3...valuen

value2 2 b1 b2 b3....bn

...

valuen 1 key value1 value2 value3...valuen

valuen 2 x1 x2 x3...xn

進行合並

得到下面的結果

key value1 value2 value3...valuen value1 a1 a2 a3....an

key value1 value2 value3...valuen value2 b1 b2 b3....bn

...

第二輪map

繼續以key value1 value2 value3...valuen整行為key,打印輸出

key value1 value2 value3...valuen value1 a1 a2 a3....an

key value1 value2 value3...valuen value2 b1 b2 b3....bn

...

第二輪reduce

將上面的結果直接進行合並之后,整理輸出格式,就可以得到預期的數據了。

 

想了很久,本人沒有找到更好的方法可以少於2輪map-reduce完成上出過程。特此發表此文,希望高人能夠給出建議,謝謝


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM