recordreader如何在hadoop中将数据发送到mapper

ffdz8vbo  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(359)

我是hadoop的新手,目前正在从donald miner和adam Shaked的mapreduce设计模式书中学习mapreduce设计模式。所以在这本书中有笛卡尔积模式。我的问题是:
记录读取器何时向Map器发送数据?
将数据发送到mapper的代码在哪里?
我看到的是cartesianrecordreader类中的下一个函数在不发送数据的情况下读取两个split。
这是源代码https://github.com/adamjshook/mapreducepatterns/blob/master/mrdp/src/main/java/mrdp/ch5/cartesianproduct.java
仅此而已,提前谢谢:)

huus2vyu

huus2vyu1#

记录读取器何时向Map器发送数据?
让我给你一个关于mapper和recordreader是如何联系的想法来回答这个问题。这是将数据发送到Map器的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 ,每次通话时 key 以及 value 将获得新值。 Key 通常是到目前为止读取的字节 value 文件中的下一行。
将数据发送到mapper的代码在哪里?
这段代码在hadoop的源代码中(可能在mapcontextimpl类中),但它类似于我在代码段中编写的代码。
编辑:源代码位于maprunner。

相关问题