2012-06-08 6 views

Odpowiedz

13

(nowe API): Domyślna klasa Mapper ma metodę run, który wygląda tak:

public void run(Context context) throws IOException, InterruptedException { 
    setup(context); 
    while (context.nextKeyValue()) { 
     map(context.getCurrentKey(), context.getCurrentValue(), context); 
    } 
    cleanup(context); 
} 

W Context.nextKeyValue(), Context.getCurrentKey() i Context.getCurrentValue() metody są owijarki do metod RecordReader. Zobacz plik źródłowy src/mapred/org/apache/hadoop/mapreduce/MapContext.java.

Ta pętla wykonuje i wywołuje metodę wdrożenia Mappera pod nazwą map(K, V, Context).

Co jeszcze chciałbyś wiedzieć?

+0

@ Chris..Thts bardzo pomocny .. ... i czy możesz wyjaśnić, że podziały i zapisy pojawiają się w rejestratorze? Jestem zdezorientowany ... – Amnesiac

+0

Podziały są tworzone przez InputFormat i pochodzą z plików wejściowych, które przekazujesz, niezależnie od tego, czy same pliki wejściowe są dzielalne, oraz z innych opcji, które możesz ominąć, np. Podział maksymalny/min. –

+0

Każdy podział jest wtedy przetwarzane w celu wytworzenia zapisów, które są przekazywane do metody mapowej –

0

org.apache.hadoop.mapred.MapTask - runNewMapper()

Imp kroki:

  1. tworzy nowe Mapper

  2. dostać wejściowe podzielone na odwzorowującego

  3. pobierz rejestrator dla podziału

  4. zainicjować czytnika rekord

  5. użyciu czytnika rekord iterację getNextKeyVal() i przekazać klucz, val do metody mappers mapy

  6. oczyścić