0

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 オブジェクトに割り当てて、問題を処理させることはできますか?

ありがとう。

4

1 に答える 1

-1

catLinuxコマンドに相当する HDFS を使用できます。

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

1 つのシーケンス ファイル内のすべてのファイルを連結します。

于 2013-03-18T11:18:22.113 に答える