使用org.apache.hadoop.mapred.mapper接口实现“in mapper”设计模式

时间:2012-11-30 05:49:10

标签: hadoop mapreduce

我正在实施一些hadoop应用程序。我几乎完成了我的编码部分。但是想要在阅读" Lin&amp ;; Chris Dryer"。至于这种方法的有效实现,需要在映射函数中保持状态一段时间,然后发出结果。因为这可以通过将一些数据结构作为mapper类中的成员变量然后在清理方法中发出来轻松实现。使用" org.apache.hadoop.mapreduce.mapper"接口可以实现上述实现。

但实际上我无法在我的系统中设置新的hadoop api,所以使用hadoop0.18,它没有" mapdreduce"包,而是使用" mapred& #34; mapper接口,用于实现map函数,该函数没有像#34; mapredcue.mapper"中那样的任何清理方法。在旧的界面中,这仍然可以在mapper设计模式中实现吗?虽然它有一个" close"方法,但是这种方法不提供任何参数或工具,因此您可以发出键值对。

1 个答案:

答案 0 :(得分:1)

您仍然可以使用旧API进行设置和清理。

您的映射器需要实现可配置接口(或扩展已配置)。在这种情况下,当在MapRunner中创建映射器类(通过ReflectionUtils.newInstance方法)时,将调用setConf(Configuration)方法传递Job配置。新API和旧API之间的区别 - 您无法访问旧API中的OutputCollector(作为新API传递给Context的位置)

最后,当所有记录都传递给map方法时,MapRunner将调用mapper的close方法(类似于新API的清理方法)。同样,您无权访问OutputCollector,因此如果您需要,您需要在map方法中创建对它的引用。