2013-03-18 100 views
0

我在HDFS中有很多文件,並希望通過MR作業將它們複製到序列文件中。 seq文件的關鍵類型是TEXT(我使用SHA1),值類型是BytesWritable(文件內容)。 我發現一些示例代碼將所有文件內容讀入一個字節數組,比如緩衝區,然後將緩衝區設置爲ByteWritable對象。例如:從HDFS文件寫入二進制數據到SequenceFile

byte[] buffer = new byte[(int)file.length()]; 
FileInputStream fis = new FileInputStream(fileEntry); 
int length = fis.read(buffer); 
fis.close(); 
key.set(sha1); 
value.set(buffer, 0, buffer.length); 
writer.append(key, value); 

我的問題是:如果我的輸入文件非常大,緩衝區大小超過了內存限制。我可以通過在每次迭代中寫入較少量數據的循環追加到ByteWritable對象嗎?或者我可以只將一個輸入流分配給BytesWritable對象並讓它處理這個問題?

謝謝。

+0

我的示例代碼從本地文件系統讀取文件。我想從HDFS讀取。 – avhacker 2013-03-18 11:26:33

+0

我想在MR工作中這樣做。謝謝。 – avhacker 2013-03-18 11:26:59

回答

-1

您可以只使用HDFS相當於Linux的cat命令:

hadoop fs -cat '/path/to/files/*.' > oneBigSequenceFile.csv

將串連裏面一個序列文件中的所有文件。