Jestem nowy w Hadoop i obecnie uczę się wzorca projektowego mapreduce z książki Donald Miner & Adam Shook MapReduce Design Pattern. Tak więc w tej książce znajduje się Wzorzec Produktu Kartezjańskiego. Moje pytanie brzmi:

  1. Kiedy czytnik rekordów wysyła dane do mapera?
  2. Gdzie jest kod wysyłający dane do mappera?

To co widzę to kolejna funkcja w klasie CartesianRecordReader odczytująca oba splity bez wysyłania danych.

Oto kod źródłowy https ://github.com/adamjshook/mapreducepatterns/blob/master/MRDP/src/main/java/mrdp/ch5/CartesianProduct.java

To wszystko, z góry dzięki :)

1
Irvan 18 listopad 2018, 21:31

1 odpowiedź

Najlepsza odpowiedź

Kiedy czytnik rekordów wysyła dane do mapera?

Pozwól, że odpowiem, dając ci wyobrażenie o tym, jak powiązane są mapper i RecordReader. To jest kod Hadoop, który wysyła dane do mapera. 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);
    }
  }

Zasadniczo Hadoop będzie wywoływał next, dopóki nie zwróci false, a przy każdym wywołaniu key i value uzyskają nowe wartości. Key to normalnie odczytane do tej pory bajty i value następny wiersz w pliku.

Gdzie jest kod wysyłający dane do mappera?

Ten kod znajduje się w kodzie źródłowym hadoop (prawdopodobnie w klasie MapContextImpl), ale przypomina to, co napisałem we fragmencie kodu.

EDYTUJ : kod źródłowy znajduje się pod adresem MapRunner.

1
Vicente Bolea 4 grudzień 2018, 10:27