[ https://issues.apache.org/jira/browse/MAPREDUCE-1574?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Danny Leshem updated MAPREDUCE-1574: ------------------------------------ Affects Version/s: 0.20.3 0.20.2 Fix Version/s: 0.20.1 0.20.2 > Combiners should implement a specialized "Combiner" interface, not the > generic "Reducer" interface > -------------------------------------------------------------------------------------------------- > > Key: MAPREDUCE-1574 > URL: https://issues.apache.org/jira/browse/MAPREDUCE-1574 > Project: Hadoop Map/Reduce > Issue Type: Improvement > Affects Versions: 0.20.1, 0.20.2, 0.20.3 > Reporter: Danny Leshem > Priority: Minor > Fix For: 0.20.1, 0.20.2 > > > I just spent 30 minutes trying to figure out why my job throws > "java.io.IOException: wrong key class" when I pass my Reducer class to > Job.setCombinerClass. Finally, I understood that a Reducer can act as > Combiner only if its output key/value are the same as its input key/value. > So yes, this is documented. But you can make life easier for users by > defining a Combiner interface (that Job.setCombinerClass will accept) to > force this at compile time. The new interface should implement the Reducer > interface and specialize it (is it even possible with generics?). > Alternatively, you can call this interface "SimpleReducer". > If the generics-trick suggested above is impossible to implement, for the > (common?) case of having the same class acting as Combiner and Reducer you > can do one of either: > 1) Thin Combiner implementation that wraps a given Reducer. > 2) Add a new method, say Job.setCombinerClassToReducer (that accepts a > Reducer), acting similarly to the new Job.setCombinerClass - but here the > name should alert the user she's doing something special. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.