RecordReader如何将数据发送到Hadoop中的映射器

时间:2018-11-18 18:31:58

标签: hadoop mapreduce mapper recordreader

我是Hadoop的新手,目前我正在从Donald Miner和Adam Shook MapReduce设计模式书中学习mapreduce设计模式。因此,本书有笛卡尔乘积模式。我的问题是:

  1. 记录读取器何时将数据发送到映射器?
  2. 将数据发送到映射器的代码在哪里?

我看到的是CartesianRecordReader类中的下一个函数读取两个拆分而不发送数据。

这是源代码https://github.com/adamjshook/mapreducepatterns/blob/master/MRDP/src/main/java/mrdp/ch5/CartesianProduct.java

仅此而已,谢谢:)

1 个答案:

答案 0 :(得分:1)

  

记录读取器何时将数据发送到映射器?

让我回答一下,让您了解映射器和RecordReader之间的关系。这是发送数据的Hadoop代码 到映射器。 1

  RecordReader<K1, V1> input;

  K1 key = input.createKey();
  V1 value = input.createValue();

  while (input.next(key, value)) {
    // map pair to output
    mapper.map(key, value, output, reporter);
    if(incrProcCount) {
      reporter.incrCounter(SkipBadRecords.COUNTER_GROUP, 
          SkipBadRecords.COUNTER_MAP_PROCESSED_RECORDS, 1);
    }
  }

基本上,Hadoop将调用next直到返回false,并且每次调用keyvalue都会获得新值。 Key通常是到目前为止读取的字节,value是文件中的下一行。

  

将数据发送到映射器的代码在哪里?

该代码位于hadoop的源代码中(可能在MapContextImpl类中),但与我在代码段中编写的代码相似。

编辑:源代码位于MapRunner