web-dev-qa-db-ja.com

HDFSの大きなブロックサイズ!未使用スペースはどのように考慮されますか?

HDFSのブロックサイズは、従来のファイルシステムのブロックサイズと比較してかなり大きい(64Mまたは128M)ことは誰もが知っています。これは、転送時間と比較したシーク時間の割合を減らすために行われます(転送速度の改善は、ディスクシーク時間の改善よりもはるかに大規模であるため、ファイルシステムを設計する際の目標は、常に転送されるデータの量と比較したシークの数)。ただし、これには内部フラグメンテーションの追加の欠点があります(これが、従来のファイルシステムのブロックサイズがそれほど大きくなく、数KBのオーダー(通常は4Kまたは8K)しかない理由です)。

私は本を​​読んでいました-Hadoop、決定的なガイド、そしてこれがどこかに書かれているのを見つけました、HDFSのブロックサイズよりも小さいファイルはブロック全体を占めておらず、ブロック全体のスペースを占めていませんが、方法を理解できませんでしたか?誰かがこれに光を当ててくれませんか。

21
Abhishek Jain

HDFSのブロック分割は、基盤となるファイルシステムの物理ブロック(ext3/fatなど)上に論理的に構築されています。ファイルシステムは物理的にブロックに分割されていません(たとえば、64MBまたは128MB、またはブロックサイズなど)。 NameNodeにメタデータを格納するのは単なる抽象概念です。 NameNodeはメタデータ全体をメモリにロードする必要があるため、メタデータエントリの数に制限があり、大きなブロックサイズの必要性を説明しています。

したがって、HDFSに格納された3つの8MBファイルは論理的に3ブロック(NameNodeの3つのメタデータエントリ)を占有しますが、基盤となるファイルシステムでは物理的に8 * 3 = 24MBのスペースを占有します。

大きなブロックサイズは、NameNodeのメモリの制限を考慮しながら、ストレージスペースの適切な使用を考慮に入れるためです。

24
Satbir

Hadoopによると-決定的なガイド

単一ディスクのファイルシステムとは異なり、単一ブロックよりも小さいHDFS内のファイルは、ブロック全体に相当する基盤となるストレージを占有しません。修飾されていない場合、この本の「ブロック」という用語は、HDFSのブロックを指します。

HDFSの各ブロックは、基盤となるOSファイルシステム(ext3、ext4など)のData Node)にファイルとして保存され、対応する詳細はNameNodeに保存されます。ファイルサイズを想定します。は200MBで、ブロックサイズは64MBです。このシナリオでは、ファイルに4つのブロックがあり、データNode 64MB、64MB、64MB、および8MBのサイズ(仮定)の4つのファイルに対応します。 1)の複製で。

ls -ltr on the Data Nodeはブロックの詳細を表示します

-rw-rw-r--1トレーニングトレーニング11Oct 21 15:27 blk_-7636754311343966967_1002.meta
-rw-rw-r--1トレーニングトレーニング410月21日15:27blk_-7636754311343966967
-rw-rw-r--1トレーニングトレーニング99Oct 21 15:29 blk_-2464541116551769838_1003.meta
-rw-rw-r--1トレーニングトレーニング1140310月21日15:29blk_-2464541116551769838
-rw-rw-r--1トレーニングトレーニング99Oct 21 15:29 blk_-2951058074740783562_1004.meta
-rw-rw-r--1トレーニングトレーニング1154410月21日15:29blk_-2951058074740783562

11
Praveen Sripati

通常のファイルシステムでは、空のファイルを作成すると、ブロックに保存されるため、4kサイズも保持されます。 HDFSでは発生しません。1GBのファイルの場合、4GBではなく1GBのメモリのみが使用されます。より明確にするために。

OSの場合:ファイルサイズ1KB、ブロックサイズ:4KB、使用メモリ:4KB、無駄:3KB。 HDFSの場合:ファイルサイズ1GB、ブロックサイズ:4GB、使用メモリ:1GB、無駄:0GB、残りの3GBは他のブロックで自由に使用できます。

*数字を真剣に受け止めないでください。ポイントを明確にするために数字を作り上げています。

1GBの異なるファイルが2つある場合、それぞれ1GBのブロックが2つあります。ファイルシステムで、それぞれ1 KBのファイルを2つ保存すると、4KB + 4KB = 8KBの2つの異なるファイルが作成され、6KBの無駄が発生します。

したがって、これにより、HDFSはファイルシステムよりもはるかに優れたものになります。しかし皮肉なことに、HDFSはローカルファイルシステムを使用しており、最終的には同じ問題が発生します。

4