2013-01-08 43 views
12

tôi nghĩ rằng họ đề cập đến giảm tốc nhưng trong chương trình của tôi, tôi cóJob.setOutputKeyClass và job.setOutputReduceClass ở đâu?

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

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

vì vậy nếu tôi có

job.setOutputKeyClass(NullWritable.class);

job.setOutputValueClass(Text.class);

tôi nhận được ngoại lệ sau

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

nhưng nếu tôi có

job.setOutputKeyClass(Text.class);

không có vấn đề.

Có lỗi không đúng với mã của tôi hoặc điều này xảy ra do NullWritable hoặc sth else?

Tôi cũng phải sử dụng job.setInputFormatClassjob.setOutputFormatClass? Bởi vì các chương trình của tôi chạy đúng mà không có chúng.

Trả lời

28

Gọi job.setOutputKeyClass(NullWritable.class); sẽ đặt các loại được mong đợi là đầu ra từ cả giai đoạn bản đồ và giảm.

Nếu Mapper của bạn phát ra các loại khác nhau hơn Reducer, bạn có thể đặt loại được phát ra bởi người lập bản đồ bằng các phương pháp'setMapOutputKeyClass()setMapOutputValueClass(). Chúng ngầm thiết lập các kiểu đầu vào được mong đợi bởi Reducer.

(nguồn: Yahoo Developer Tutorial)

Về câu hỏi thứ hai của bạn, mặc định InputFormatTextInputFormat. Điều này xử lý từng dòng của mỗi tệp đầu vào dưới dạng một bản ghi riêng biệt và không thực hiện phân tích cú pháp. Bạn có thể gọi các phương pháp này nếu bạn cần để xử lý đầu vào của bạn trong một định dạng khác nhau, sau đây là một số ví dụ:

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 

Các trường hợp mặc định của OutputFormatTextOutputFormat, mà viết (key, value) cặp trên dòng riêng lẻ của một tệp văn bản. Một số ví dụ dưới đây:

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 

(nguồn: Other Yahoo Developer Tutorial)

+0

Oh bạn nói đúng, tôi không biết về hai phương pháp mà bạn mentioned.Adding họ chương trình của tôi runs.Of nhiên tôi sử dụng công việc không JobConf nhưng các phương thức tồn tại rất tốt.Cảm ơn bạn rất nhiều! Bạn có thể cho tôi biết về phần cuối của câu hỏi của tôi không? – nik686

+0

@ nik686 Tôi đã thêm câu trả lời cho phần cuối của câu hỏi của bạn ở trên. –

+0

Vì vậy, mặc định là TextInputFormat và TextOutputFormat đó là lý do tại sao chương trình của tôi chạy.Cảm ơn bạn rất nhiều! – nik686