任何人都可以解释RecordReader的实际工作原理吗?在程序开始执行后,方法nextkeyvalue()
,getCurrentkey()
和getprogress()
如何工作?
答案 0 :(得分:14)
(新API):默认的Mapper类有一个如下所示的run方法:
public void run(Context context) throws IOException, InterruptedException {
setup(context);
while (context.nextKeyValue()) {
map(context.getCurrentKey(), context.getCurrentValue(), context);
}
cleanup(context);
}
Context.nextKeyValue()
,Context.getCurrentKey()
和Context.getCurrentValue()
方法是RecordReader
方法的包装器。请参阅源文件src/mapred/org/apache/hadoop/mapreduce/MapContext.java
。
所以这个循环执行并调用Mapper实现的map(K, V, Context)
方法。
具体来说,您还想知道什么?
答案 1 :(得分:0)
org.apache.hadoop.mapred.MapTask - runNewMapper()
Imp步骤:
创建新的映射器
获取映射器的输入拆分
获取分割的记录阅读器
初始化记录阅读器
使用记录阅读器迭代getNextKeyVal()并将密钥,val传递给映射器映射方法
清理