25

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

私は本を​​調べていました-Hadoop、決定的なガイドで、HDFSのブロックサイズよりも小さいファイルはブロック全体を占有せず、ブロック全体のスペースを占めていませんが、理解できませんでした。誰かがこれに光を当ててくれませんか。

4

3 に答える 3

29

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

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

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

于 2013-01-01T08:58:33.843 に答える
11

Hadoop によると - The Definitive Guide

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

HDFS の各ブロックは、基盤となる OS ファイル システム (ext3、ext4 など) のデータ ノードにファイルとして保存され、対応する詳細は名前ノードに保存されます。ファイル サイズが 200MB、ブロック サイズが 64MB であるとします。このシナリオでは、64MB、64MB、64MB、および 8MB のサイズのデータ​​ ノード内の 4 つのファイルに対応するファイル用の 4 つのブロックがあります (1 のレプリケーションを想定)。

ls -ltrデータノードの は、ブロックの詳細を表示します

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

于 2012-10-22T15:16:36.693 に答える