2013-03-08 49 views
0

我想了解一個示例hadoop項目。它具有以下的代碼塊如何爲SequenceFileInputFormat定義映射函數的鍵和值輸入?

jconf.setOutputKeyClass(Text.class); 
jconf.setOutputValueClass(Text.class); 
jconf.setInputFormat(SequenceFileInputFormat.class); 

this link,我讀到爲SequenceFileInputFormat,鍵和值是用戶定義的。我需要爲此實現RecordReader嗎?我沒有看到它在項目中實施。是否有任何默認分隔符用於將輸入分割分割爲鍵值對?

回答

1

您不必實現RecordReader來讀取序列文件。

但是,生成序列文件並不像生成文本文件那麼簡單。 所有命令如

Hadoop的FS -put

默認生成HDFS的文本文件。

如果您想測試一個需要序列文件作爲輸入的MR程序,首先需要將您的文本文件轉換爲序列文件並將其作爲輸入。

要從文本文件創建序列文件,可以編寫帶有標識映射器且不含reducer的簡單MR。您需要將輸入文件格式設置爲文本並將該文本文件作爲輸入;將輸出格式設置爲序列文件。這項工作的輸出將是您的文本文件的順序文件格式的副本。請確保您選擇此作業的輸出鍵和值,同時牢記使用序列文件的任何後續MR作業將具有接受它們作爲輸入鍵和值。換句話說,序列文件中的鍵和值在創建時決定。

任何後續的MR作業(如您所引用的那個作業)需要一個序列文件 可以使用上述序列文件,並且映射器輸入中的'key'和'value'類型與您之前發送的相同。

+0

謝謝Esawara! 「序列文件中的鍵和值在創建時決定。」問題是如何?有沒有一個默認的分隔符用於識別密鑰,我沒有用於項目運行的樣本輸入,但是從我在代碼中看到的內容看來,期望密鑰成爲文件的路徑。 – learningtocode 2013-03-08 11:17:00

+0

這裏沒有分隔符的概念。無論作爲創建序列文件的作業的輸出發出的輸出鍵和值都將自動用作後續作業中的輸入鍵和值。 – 2013-03-10 10:14:08