0

我正在实现一些 hadoop 应用程序。我的编码部分几乎完成了。但是想在阅读“Lin & Chris Dryer”的映射器设计模式书后改进编码器。至于这种方法的有效实现,需要在 map 函数中保留状态一段确定的时间,然后发出结果。因为这可以通过将一些数据结构作为映射器类中的成员变量然后在清理方法中发出来轻松实现。上面的实现在“org.apache.hadoop.mapreduce.mapper”接口下是可行的。

但实际上我无法在我的系统中设置新的hadoop api,所以使用没有“mapdreduce”包的hadoop0.18,而是使用“mapred”映射器接口来实现没有的map函数任何清理方法,如“mapredcue.mapper”。映射器设计模式中的这个仍然可以在旧接口中实现吗?虽然它有一个“关闭”方法,但此方法不提供任何参数或工具,以便您可以发出您的键值对。

4

1 回答 1

1

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

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

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

于 2012-11-30T11:44:41.200 回答