有没有可能在Map器级别对用户定义的java计数器设置条件来控制Map器输出??
Long l = context.getCounter(Counters.COUNT).getValue();
if(5L >= l) {
context.getCounter(Counters.COUNT).increment(1);
context.write((LongWritable)key, value);
} else {
System.out.println("MAP ELSE");
return;
}
向减速机输入超过5条记录。有机会控制这一切吗。???
1条答案
按热度按时间00jrzges1#
你不能这样做,如果你的输入文件有3个分裂,那么你将有3个Map器运行。每个Map器都有其各自的计数值(取决于如何增加计数值的逻辑),并且只有在所有Map器在shuffle阶段完成后,reduce端才会知道。
如果要限制Map输出。然后有一个减速机
job.setNumReduceTasks(1)
限制减速机的输出。像这样的。如果你想得到reduce端的计数器值。您可以将其添加到reduce设置方法中。