0

1000 個の小さなファイル (1 ~ 2 MB) について、HDFS とローカル ファイル システムのパフォーマンスを比較したいと考えています。シーケンス ファイルを使用しない場合、HDFS はローカル ファイル システムと比較して、1000 個のファイルを読み取るのにほぼ 2 倍の時間を要します。ここでシーケンス ファイルについて聞きました - HDFS の小さなファイルの問題 これらのレコードを取得するための HDFS の応答時間が、ローカル FS よりも優れていることを示したいと思います。シーケンス ファイルは役に立ちますか、それとも別のものを探すべきですか? (おそらくHBase)

編集: Java プログラムを使用して、ここのようなファイルを読み取りますHDFS Read through Java

4

1 に答える 1

1

はい、単純なファイル取得の場合、1 つのシーケンス ファイルを取得する方が、1000 ファイルを取得するよりもはるかに高速です。hadoop fs -get ...HDFS から読み取る場合、JVM のスピンアップ ( を使用していると仮定)、NameNode からの各ファイルの場所の取得、およびネットワーク時間 (複数のデータノードがあると仮定) など、はるかに多くのオーバーヘッドが発生します。

シーケンス ファイルは、コンテナの一種と考えることができます。1000 個のファイルすべてをシーケンス ファイルに入れる場合、1000 個ではなく 32 個のブロック (ブロックサイズが 64MB に設定されている場合) を取得するだけで済みます。これにより、場所の検索と作成されるネットワーク接続の合計が削減されます。この時点で、シーケンス ファイルの読み取りで別の問題が発生します。バイナリ形式です。

HBase は、低遅延でランダムな読み取りに適しているため、より適切なオプションになる可能性があります。ディスク シークは引き続き発生することに注意してください (メモリから作業している場合を除く)。そのため、HDFS をファイル ストアとして使用するよりも、多数の小さなファイルをローカルで読み取る方が適切なソリューションになる場合があります。

于 2015-06-29T18:52:39.570 に答える