我想在内部捕获有关键及其值的一些信息 自定义分区程序(甚至是默认的HashPartitioner)。
我可以通过访问“context”变量在映射器和reducer中使用自定义计数器。 但是,在分区程序内部,无法访问“上下文”变量。
有没有办法: -1-从分区程序访问“context”变量? 要么 -2-如何将计数器添加到分区程序?
谢谢。
答案 0 :(得分:1)
通过分区器的每个键/值对(1)由映射器写入上下文或(2)将传递给reducer的reduce()方法。您可以将代码放在这两个位置中的任何一个中,以便将自定义计数器写入并增加到上下文。
如果必须在分区程序中编写代码,请尝试使分区程序实现JobConfigurable。这应该使hadoop在首次实例化分区器时使用JobConf对象调用分区器。您可以在配置中放置信息(如顺序或文本文件的名称以输出信息),并以这种方式将其传递给分区程序。
答案 1 :(得分:0)
无法访问分区程序中的上下文(以及计数器)。
不确定为什么你不能像Chris Gerken建议的那样在mapper中添加逻辑,但是类似/替代的方法是创建一个map wrapper类,在这里创建一个Mapper.Context包装类然后委托给使用这个包装上下文的所需Mapper类的实际map方法 - 然后你可以拦截context.write方法调用并按照你的意愿行事 - 虽然与更新映射器代码没有任何不同。