16

HDFS は通常の Linux ファイル システムを使用してデータ ノードにデータを格納することを知っています。私の HDFS ブロック サイズは128 MBです。Hadoop クラスターに十分なディスク容量があるとしましょう。10 GBつまり、HDFS は最初に80 blocks利用可能なストレージとして持っています。

たとえば の小さなファイルを作成すると12.8 MB、#available HDFS ブロックは 79 になります。別の小さなファイルを作成するとどうなります12.8 MBか? #availbale ブロックは 79 のままでしょうか、それとも 78 まで下がるのでしょうか? 前者の場合、HDFS は基本的に、使用可能な空きディスク領域に基づいて各ブロックの割り当て後に #available ブロックを再計算するため、#available ブロックは、128 MB を超えるディスク領域が消費された後にのみ 78 になります。どうか明らかにしてください。

4

4 に答える 4

23

知るための最良の方法は、試してみることです。以下の結果を参照してください。

しかし、試してみる前に、私の推測では、構成内で完全なブロックを80 個しか割り当てられなくても、空でないファイルを 80 個以上割り当てることができると思います。これは、空でないファイルを割り当てるたびに HDFS が完全なブロックを使用しないと思うためです。別の言い方をすれば、HDFS ブロックはストレージ割り当てユニットではなく、レプリケーションユニットです。HDFS のストレージ割り当て単位は、基盤となるファイルシステムの単位だと思います (ブロック サイズ 4 KB の ext4 を使用し、レプリケーション ファクター 3 のクラスターで 1 KB のファイルを作成すると、4 KB の 3 倍を消費します = 12 KB のハードディスク容量)。

十分に推測して考えてみましょう。私のラボ構成は次のとおりです。

  • Hadoop バージョン 1.0.4
  • 4 つのデータ ノード。それぞれに 5.0G 弱の空き容量があり、ext4 ブロック サイズは 4K です。
  • ブロック サイズ 64 MB、デフォルトのレプリケーション 1

HDFS を開始すると、次の NameNode の概要が表示されます。

  • 1 ファイルとディレクトリ、0 ブロック = 合計 1
  • 使用される DFS: 112 KB
  • DFS 残り: 19.82 GB

次に、次のコマンドを実行します。

  • hadoop fs -mkdir /test
  • for f in $(seq 1 10); do hadoop fs -copyFromLocal ./1K_file /test/$f; done

これらの結果:

  • 12 個のファイルとディレクトリ、10 ブロック = 合計 22 個
  • DFS 使用: 122.15 KB
  • DFS 残り: 19.82 GB

したがって、10 個のファイルは 10 倍の 64 MB を消費しませんでした (「DFS Remaining」の変更はありません)。

于 2013-02-25T10:51:53.060 に答える
1

HDFS は、ローカル ファイル システムで必要なものだけを使用します。そのため、12 MB のファイルを表すブロックは、保存時に (保存されている各データノードで) 12 MB かかります。したがって、データ用のスペースがあると仮定すると、必要な数のブロックを持つことができます。

于 2013-02-25T11:41:16.383 に答える
0

「利用可能なブロック」は 79 のままです (この質問を参照してください)。とにかく、「使用可能なブロック」に関して十分な空き容量があるかどうかを HDFS が判断するとは思いません。

于 2013-03-29T03:11:58.090 に答える