MapReduce之輸入輸出類型

轉載:http://blog.csdn.net/lucktroy/article/details/7957120 

話說用hadoop MapReduce編程有一陣子了,但是關於Mapper, Combiner, Reducer的輸入輸出類型居然花了我一整天。

我本以爲Combiner的輸入與Mapper的輸出一致,Combiner的輸出與Reducer的輸入一致就可以了,就像圖1:


圖1 假想

我的程序Mapper輸出是<Text, DoubleWritable>; Combiner的輸入輸出分別是<Text, DoubleWritable>, <Text, Text>; 然後Reducer的輸入是<Text, Text>. 

我本想邏輯上都沒問題,但事與願違,老出錯. 

在hadoop中,默認的job.setOutputkeyClass(*.class), job.setOutputValueClass(*.class)是針對Mapper與Reducer的,這裏因爲兩者不同,我試着用job.setMapOutputKeyClass(*.class)與job.setMapOutputValueClass(*.class)區分. 但依然有錯誤. 

在幾經周折後,在看完一篇博文“《Data-intensive Text Processing with MapReduce》讀書筆記第3章:MapReduce算法設計(1)”後,發現原來Mapper與Combiner的輸出均要與Reducer對應(見圖2),於是改了過來,終於通過,因爲沒有看過hadoop源碼,所以也不知道它底層具體是如何實現的. 


圖2 實際

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章