6

Hdfsのnamenodeのファイルごとに何バイトを占めるか知っている人はいますか?32Gメモリの単一のネームノードに保存できるファイルの数を見積もりたい。

4

3 に答える 3

12

各ファイル、ディレクトリ、またはブロックは、ネームノードメモリで約150バイトを占有します。[1]したがって、32G RAMを備えたネームノードを持つクラスターは、最大で約3,800万のファイルをサポートできます(ネームノードがボトルネックであると想定)。(各ファイルもブロックを使用するため、各ファイルは実質的に300バイトを使用します。3xレプリケーションも想定しています。したがって、各ファイルは900バイトを使用します)

ただし、実際には、マッピングを維持するためにすべての32Gをネームノードで使用できるわけではないため、この数ははるかに少なくなります。そのマシンのネームノードにより多くのヒープスペースを割り当てることにより、それを増やすことができます。

レプリケーションもこれにあまり影響しません。レプリカを追加するたびに、メモリ要件に約16バイトが追加されます。[2]

[1] https://blog.cloudera.com/small-files-big-foils-addressing-the-located-metadata-and-application-challenges/

[2] http://search-hadoop.com/c/HDFS:/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfo.java%7C%7CBlockInfo

于 2012-05-26T10:54:07.060 に答える
7

Clouderaは、100万ブロックあたり1GBのNameNodeヒープスペースを推奨しています。100万ファイルごとに1GBはそれほど保守的ではありませんが、機能するはずです。

また、複製係数を掛ける必要はありません。受け入れられた答えは間違っています。

デフォルトのブロックサイズである128MBを使用すると、192MBのファイルは2つのブロックファイルに分割されます。1つは128MBファイル、もう1つは64MBファイルです。NameNodeでは、名前空間オブジェクトはファイルとブロックの数によって測定されます。同じ192MBのファイルは3つの名前空間オブジェクト(1ファイルのiノード+ 2ブロック)で表され、約450バイトのメモリを消費します。

128 MBの1つのデータファイルは、NameNode上の2つの名前空間オブジェクト(1ファイルのiノード+ 1ブロック)で表され、約300バイトのメモリを消費します。対照的に、それぞれ1 MBの128個のファイルは256個の名前空間オブジェクト(128個のファイルiノード+ 128ブロック)で表され、約38,400バイトを消費します。

レプリケーションはディスク容量に影響しますが、メモリ消費には影響しません。レプリケーションは、各ブロックに必要なストレージの量を変更しますが、ブロックの数は変更しません。NameNode上の1つのブロックで表されるDataNode上の1つのブロックファイルが3回複製される場合、ブロックファイルの数は3倍になりますが、それらを表すブロックの数は3倍になりません。

例:

  1. 1 x 1024 MBファイル1ファイルiノード8ブロック(1024 MB / 128 MB)合計=9オブジェクト*150バイト=1,350バイトのヒープメモリ
  2. 8 x128MBファイル8ファイルiノード8ブロック合計=16オブジェクト*150バイト=2,400バイトのヒープメモリ
  3. 1,024 x1MBファイル1,024ファイルiノード1,024ブロック合計=2,048オブジェクト*150バイト=307,200バイトのヒープメモリ

clouderaからの元の記事のさらに多くの例の記事。

于 2016-09-01T20:55:58.623 に答える
4

(各ファイルのメタデータ= 150バイト)+(ファイルのブロックメタデータ= 150バイト)= 300バイトなので、1ブロックごとに100万個のファイルが消費されます= 300 * 1000000 =300000000バイト=レプリケーションファクター1の場合は300MB、レプリケーションファクターが3の場合は900MBが必要です。

したがって、1GBごとの経験則として、100万個のファイルを保存できます。

于 2015-07-25T20:32:52.413 に答える