HDFS に大量のファイルがあり、それらを MR ジョブでシーケンス ファイルにコピーしたいと考えています。seq ファイルのキー タイプは TEXT (SHA1 を使用) で、値のタイプは BytesWritable (ファイル コンテンツ) です。いくつかのサンプル コードでは、すべてのファイル コンテンツをバイト配列 (たとえばバッファー) に読み取り、バッファーを ByteWritable オブジェクトに設定しています。元:
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 オブジェクトに割り当てて、問題を処理させることはできますか?
ありがとう。