2014-01-24 41 views
0

我必須實現兩個mapReduce作業,其中階段II(Mapper_2)中的映射器需要在階段I(reducer_1)中具有Reducer的輸出。Mapper with multipleInput on Hadoop cluster

Mapper_2還需要另一個大文本文件(2TB)的輸入。

我寫了如下,但我的問題是:文本輸入將分散在羣集中的節點,但減速器_1的輸出如何,因爲我希望在階段II中的每個映射器具有整個Reducer_1的輸出。

MultipleInputs.addInputPath(Job, TextInputPath, SomeInputFormat.class, Mapper_2.class); 
MultipleInputs.addInputPath(Job, Ruducer_1OutputPath, SomeInputFormat.class, Mapper_2.class); 

回答

1

您使用多輸入似乎很好。我會考慮使用分佈式緩存來將reducer_1的輸出與mapper_2共享。

JobConf job = new JobConf(); 
DistributedCache.addCacheFile(new URI("/path/to/reducer_1/ouput"), 
           job); 

另外,使用分佈式緩存時,請記住在mapper_2的setup方法中讀取緩存文件。

設置()在地圖前,每個映射器()被調用和清理(運行一次),每個映射後的最後一次調用映射()

+0

謝謝您的回答,我怎麼能在distributedCache訪問數據運行一次當我寫Mapper_2代碼? – SNSI