HDFSアーキテクチャのページによると、HDFSは「ストリーミングデータアクセス」用に設計されています。それが正確に何を意味するのかはわかりませんが、seekのような操作が無効になっているか、パフォーマンスが最適ではないことを意味していると思います。これは正しいでしょうか?
ブラウザクライアントにストリーミングする必要のあるオーディオ/ビデオファイルを保存するためにHDFSを使用することに興味があります。ほとんどのストリームは開始から終了しますが、シークの数が多いストリームもあります。
たぶん、これをより良くすることができる別のファイルシステムがありますか?
ストリーミングは、データをバーストまたはウェーブで受信するのではなく、データを転送するときに特定のしきい値を超える一定のビットレートを提供できることを意味します。
HDFSがストリーミング用にレイアウトされている場合でも、シークをサポートしている可能性がありますが、一定のストリームのデータをキャッシュするために少しオーバーヘッドが必要です。
もちろん、システムとネットワークの負荷によっては、シークに少し時間がかかる場合があります。
HDFSは、64MBなどの大きなブロックにデータを保存します。アイデアは、データをハードドライブに順番に配置して、ハードドライブがデータを読み取るために実行する必要のあるシークの数を減らすことです。
さらに、HDFSはユーザースペースファイルシステムであるため、すべてのブロック(およびそのレプリカ)がクラスター全体に格納されるメモリ内ディレクトリを含む単一の中央名ノードがあります。ファイルは大きく(たとえば1 GB以上)なると予想され、いくつかのブロックに分割されます。ファイルを読み取るために、コードは名前ノードにブロックのリストを要求し、次にブロックを順番に読み取ります。
これらの大きなデータブロックに対してドライブが維持できる最大I/Oレートを維持することにより、データはハードドライブから「ストリーミング」されます。
Hadoopからデータをストリーミングする場合:決定的なガイド、第3版:
HDFSは、最も効率的なデータ処理パターンは1回の書き込み、複数回の読み取りパターンであるという考えに基づいて構築されています。データセットは通常、ソースから生成またはコピーされ、その後、時間の経過とともにそのデータセットに対してさまざまな分析が実行されます。各分析には、データセットのすべてではないにしても大部分が含まれるため、データセット全体を読み取る時間は、最初のレコードを読み取る際の待ち時間よりも重要です。