2013-01-08 17 views
12

Myślałem, że odnoszą się one do reduktora, ale w moim programie mamDo czego odnosi się job.setOutputKeyClass i job.setOutputReduceClass?

public static class MyMapper extends Mapper< LongWritable, Text, Text, Text >

i

public static class MyReducer extends Reducer< Text, Text, NullWritable, Text >

więc jeśli mam

job.setOutputKeyClass(NullWritable.class);

job.setOutputValueClass(Text.class);

otrzymuję następujący wyjątek

Type mismatch in key from map: expected org.apache.hadoop.io.NullWritable, recieved org.apache.hadoop.io.Text

ale jeśli mam

job.setOutputKeyClass(Text.class);

nie ma problemu.

Czy coś jest nie tak z moim kodem lub dzieje się tak z powodu NullWritable lub czegoś innego?

Czy muszę również używać job.setInputFormatClass i job.setOutputFormatClass? Ponieważ moje programy działają poprawnie bez nich.

Odpowiedz

28

Wywołanie job.setOutputKeyClass(NullWritable.class); ustawi typy oczekiwane jako dane wyjściowe zarówno z mapy, jak i z etapów redukcji.

Jeśli twój Mapper emituje różne rodzaje niż Reduktor, możesz ustawić typy emitowane przez program odwzorowujący metodami JobConf 'setMapOutputKeyClass() i setMapOutputValueClass(). Te domyślnie ustawiają typy wejść oczekiwane przez Reduktora.

(źródło: Yahoo Developer Tutorial)

Odnośnie drugiego pytania, domyślnie InputFormat jest TextInputFormat. Traktuje to każdy wiersz każdego pliku wejściowego jako osobny rekord i nie wykonuje analizy składniowej. Można nazwać te metody, jeśli trzeba przetworzyć wejście w innym formacie, oto kilka przykładów:

InputFormat    | Description          | Key          | Value 
-------------------------------------------------------------------------------------------------------------------------------------------------------- 
TextInputFormat   | Default format; reads lines of text files  | The byte offset of the line    | The line contents 
KeyValueInputFormat  | Parses lines into key, val pairs     | Everything up to the first tab character | The remainder of the line 
SequenceFileInputFormat | A Hadoop-specific high-performance binary format | user-defined        | user-defined 

Domyślna instancja OutputFormat jest TextOutputFormat, który pisze (klucz, wartość) pary na poszczególnych liniach o charakterze plik tekstowy. Niektóre przykłady poniżej:

OutputFormat    | Description 
--------------------------------------------------------------------------------------------------------- 
TextOutputFormat   | Default; writes lines in "key \t value" form 
SequenceFileOutputFormat | Writes binary files suitable for reading into subsequent MapReduce jobs 
NullOutputFormat   | Disregards its inputs 

(źródło: Other Yahoo Developer Tutorial)

+0

Oh masz rację, ja nie wiedziałem o tych dwóch metod, które mentioned.Adding im mój program runs.Of Oczywiście używam pracy nie JobConf, ale metody istnieją również. Dziękuję bardzo! Czy mógłbyś powiedzieć mi coś o ostatniej części mojego pytania? – nik686

+0

@ nik686 Dodałem odpowiedź do ostatniej części twojego pytania powyżej. –

+0

Tak więc domyślne ustawienie to TextInputFormat i TextOutputFormat, dlatego program działa. Dziękuję bardzo! – nik686

Powiązane problemy