2013-04-16 32 views
2

我想捕获一些关于 自定义分区程序(或甚至默认的HashPartitioner)中的键及其值的信息。Hadoop分区程序中的自定义计数器

我可以通过访问“上下文”变量在映射器和缩减器中使用自定义计数器。 但是,在分区程序中,无法访问“上下文”变量。

有什么办法可以: -1-获得对分区程序中的“上下文”变量的访问权吗? 或 -2-如何向分区添加计数器?

谢谢。

回答

1

通过分区程序的每个键/值对(1)都由映射器写入上下文或(2)将传递给reducer的reduce()方法。您可以将代码放在这两个位置中的任意一个位置,以将自定义计数器写入并递增到上下文。

如果您必须在分区器中编写代码,请尝试使分区器实现JobConfigurable。当分区器第一次实例化时,应该让hadoop用JobConf对象调用分区器。您可以将信息放入配置中(例如顺序或文本文件的名称以输出信息),并以此方式将其传递到分区器。

+0

谢谢克里斯的答案。如您所说,可以在映射器或减速器上添加计数器。但是我真正需要的是这些值的拦截器,而无需访问映射器或Reducer代码。有什么方法可以在Hadoop中编写拦截器? – user2262938

+0

已更新的答案。 –

0

无法访问分区程序中的上下文(并作为计数器)。

不确定为什么你不能像Chris Gerken所建议的那样在映射器中添加逻辑,但是类似/可选的方法是创建一个映射包装类,其中创建一个Mapper.Context包装类,然后委托给你想要的Mapper类的实际映射方法与这个包装的上下文 - 然后你可以拦截context.write方法调用,并做你想做的事 - 与刚更新mapper代码没有什么不同。

相关问题