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對象並讓它處理這個問題?
謝謝。
我的示例代碼從本地文件系統讀取文件。我想從HDFS讀取。 – avhacker 2013-03-18 11:26:33
我想在MR工作中這樣做。謝謝。 – avhacker 2013-03-18 11:26:59