在Hadoop中使用RecordReader

时间:2012-06-08 05:24:27

标签: hadoop mapreduce

任何人都可以解释RecordReader的实际工作原理吗?在程序开始执行后,方法nextkeyvalue()getCurrentkey()getprogress()如何工作?

2 个答案:

答案 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步骤:

  1. 创建新的映射器

  2. 获取映射器的输入拆分

  3. 获取分割的记录阅读器

  4. 初始化记录阅读器

  5. 使用记录阅读器迭代getNextKeyVal()并将密钥,val传递给映射器映射方法

  6. 清理