Как RecordReader отправляет данные мапперу в Hadoop - PullRequest
0 голосов
/ 18 ноября 2018

Я новичок в Hadoop, и в настоящее время я изучаю шаблон проектирования mapreduce из книги Donald Miner и Adam Shook MapReduce Design Pattern. Таким образом, в этой книге есть декартово произведение. Мой вопрос:

  1. Когда программа для чтения записей отправляет данные в маппер?
  2. Где находится код, который отправляет данные в маппер?

То, что я вижу, это следующая функция в классе CartesianRecordReader, считывающая оба разбиения без отправки данных.

Вот исходный код https://github.com/adamjshook/mapreducepatterns/blob/master/MRDP/src/main/java/mrdp/ch5/CartesianProduct.java

Вот и все, заранее спасибо:)

1 Ответ

0 голосов
/ 03 декабря 2018

Когда программа для чтения записей отправляет данные в маппер?

Позвольте мне ответить, дав вам представление о том, как связаны картограф и 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, и при каждом вызове key и value получат новые значения. Key - обычно считанные байты и value следующая строка в файле.

Где находится код, который отправляет данные в маппер?

Этот код находится в исходном коде hadoop (возможно, в классе MapContextImpl), но он напоминает то, что я написал в фрагменте кода.

РЕДАКТИРОВАТЬ : Исходный код: MapRunner .

...