今天详细分析了一下nutch源代码,发现程序调用多次map原因:
首先开始以为是LocalJobRunner的原因,因为LocalJobRunner将输入切分成了若干份rawSplits看,然后对每个分块调用MapTask线程执行处理(备注:MapTask不是Map类,他是负责管理Map类的程序,他调用MapRunner函数调用Map函数)。
但后来发现不是LocalJobRunner类的原因,继续看代码发现在MapRunner类中调用Map类的map函数的地方源代码是这样的:
while (input.next(key, value)) {
// map pair to output
System.err.println("Input.next="+value.toString());
mapper.map(key, value, output, reporter);
if(incrProcCount) {
reporter.incrCounter(SkipBadRecords.COUNTER_GROUP,
SkipBadRecords.COUNTER_MAP_PROCESSED_RECORDS, 1);
}
}
对于一个map的输入,按照键值对循环调用map函数,就是说有几个url就会调用几次map