我想在自定义分区器(甚至是默认的hashpartitioner)中捕获一些关于键及其值的信息。我可以通过访问“context”变量在mappers和reducer中使用自定义计数器。但是,在partitioner中无法访问“context”变量。有什么方法可以:-1-从分区器访问“context”变量吗?或者-2-如何向分区器添加计数器?谢谢您。
3htmauhk1#
通过分区器的每个键/值对(1)由Map程序写入上下文,或(2)将传递给reducer的reduce()方法。您可以将代码放在这两个位置中的任何一个,以编写自定义计数器并将其增量到上下文中。如果必须在分区器中编写代码,那么请尝试使分区器实现jobconfigurable。这应该使hadoop在第一次示例化分区器时使用jobconf对象调用分区器。您可以将信息放入配置中(例如要输出信息的序列文件或文本文件的名称),并通过这种方式将其传递给分区器。
3npbholx2#
无法访问分区器中的上下文(结果是计数器)。不知道为什么不能像chris gerken建议的那样在mapper中添加逻辑,但是类似的/替代的方法是创建一个map wrapper类,如果您创建一个mapper.context Package 类,然后用这个 Package 的上下文委托给所需Map器类的实际Map方法,那么您就可以截获context.write方法调用并做您想做的事情,这与只更新Map器代码没有什么不同。
2条答案
按热度按时间3htmauhk1#
通过分区器的每个键/值对(1)由Map程序写入上下文,或(2)将传递给reducer的reduce()方法。您可以将代码放在这两个位置中的任何一个,以编写自定义计数器并将其增量到上下文中。
如果必须在分区器中编写代码,那么请尝试使分区器实现jobconfigurable。这应该使hadoop在第一次示例化分区器时使用jobconf对象调用分区器。您可以将信息放入配置中(例如要输出信息的序列文件或文本文件的名称),并通过这种方式将其传递给分区器。
3npbholx2#
无法访问分区器中的上下文(结果是计数器)。
不知道为什么不能像chris gerken建议的那样在mapper中添加逻辑,但是类似的/替代的方法是创建一个map wrapper类,如果您创建一个mapper.context Package 类,然后用这个 Package 的上下文委托给所需Map器类的实际Map方法,那么您就可以截获context.write方法调用并做您想做的事情,这与只更新Map器代码没有什么不同。