簡體   English   中英

如果hadoop中有兩個映射器,則僅一個映射器的組合器

[英]Combiner for just one mapper, in cases where there are two mappers in hadoop

我有兩個映射器類,它們處理不同的輸入,但是它們的輸出將采用相同的格式,並將傳遞給相同的reducer。 是否可以僅針對兩個映射器類之一實現組合器?

使用組合器,如果將Hadoop MR設置為使用一個,它將處理所有映射器的輸出。 您無法指定特定的映射器。

也許考慮以下兩個選項:

  1. 將組合器應用於所有輸出-將映射器的輸出映射到通用類型,以便化簡器可以處理(合並?)它們。 考慮不管數據來自哪個映射器,合並是否都能正常工作。 對這種想法的一種修改是在您的鍵或從映射器輸出的值中設置類型變量,然后在合並器中使用它來確定天氣做什么。

  2. 使用Map本地合並-如果您知道一個映射器的輸出可以很好地合並,則可以在映射器本身內進行一些聚合/合並,並且僅定期寫入輸出。 為了使它正常工作,您需要對工作中的輸入數據有一定的了解。

查詢有點不清楚。 我假設您正在詢問有關重新使用同一組合器來組合兩個不同映射器的輸出的問題。 因為兩個映射器的輸出是相同的,所以應該是可能的。

可以使用MultipleInputs類在單個作業中使用兩個映射器,或者可以在兩個不同的作業中使用兩個映射器。 無論如何,必須根據每個作業指定組合器。

另外請注意

1)映射器的o / p應該與reducer的i / p匹配。

2)映射器的o / p應該與組合器的i / p匹配。

3)組合器的I / P和O / P應該具有相同的類型。

適用於最后一個鏈映射器的合並器,附帶示例代碼

ChainMapper.addMapper(job, SalesRecordMapper.class, LongWritable.class, Text.class, Text.class, DoubleWritable.class, configuration);

ChainMapper.addMapper(job, ItemDiscountMapper.class, Text.class, DoubleWritable.class, Text.class, DoubleWritable.class, configuration);

job.setCombinerClass(DoubleReducer.class);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM