名前ノードにおける名前空間の管理は、HDFSクラスタファイルシステムおよびデータ・ブロックのファイル間のディレクトリツリー全体のマッピングを管理する責任があります。ここでは名前空間のメモリ構造です:
上記実際には、名前空間自体が巨大な木で見られること、ファイルのディレクトリツリーです。このツリーではINodeFile
、ファイルを表しINodeDirectory
、そのファイルのディレクトリを示します。HDFSの実装では、INodeFile
とINodeDirectory
継承されているINode
以下は、INode
継承:
ツリーデータ構造を詳細に説明しました
- iノード
INode
であるINodeFile
とINodeDirectory
つまり親クラスは、キー属性がありparent
、これは現在のinodeの父親がいることを示しINode
、各ファイルまたはディレクトリは、ファイルのディレクトリツリーを構築することができるように、親子関係に応じて、その親ノードを追跡します。これは、ルートディレクトリツリーです/
- INodeWithAdditionalFields
一意の識別子:このクラスは、以下のようなファイルやディレクトリの共通の属性が含まれid
、INode
名前、権限、修正時刻、アクセス時間やその他の基本的な情報を。また、新しいプロパティの登場後も簡単に機能によって拡張することができれば、増やすことなどクォータ、スナップショット機能などの拡張属性機能を、提供する共通の基本的な特性に加えて、
- INodeFile
INodeFile iノードとINodeWithAdditionalFieldsプロパティを継承することに加えて、ファイルを表し、ファイルの2つの特別な属性があります。
- ヘッダ:識別情報ストレージポリシーID、及びデータ・ブロック・サイズのコピー数
- ブロック:ファイルに含まれるデータ・ブロックの配列
- INodeDirectory
INodeDirectoryは、子ノードの子のリストを保持しています。それが挿入されたときに、書き込み性能の一部を失うことになるが、その後の高速なバイナリ検索を容易にすることができるが、特に、子ノード名整然としたストレージに応じて、デフォルトのサイズのArrayListの5人の子供をされて記述されるべきパフォーマンス、一般的なストレージシステム、読み出し動作よりも読み込みを改善します書き込みを行う割合が高くなっています
名前空間のメモリ見積もり
名前空間の管理ファイルのディレクトリツリーは、メモリ名前ノードに保存されているので、アクセス速度を向上させるためにされています。では、どのように多くのメモリ用の名前空間のファイルのディレクトリツリーのアカウントを推定するために管理していますか?ここでは、占有いくつかの重要なメモリ・データ構造から推定します。
階層内のディレクトリとファイルの構造は、次の表に示す各プロパティのメモリ使用量:
図の属性情報に加えて、いくつかの追加の非共通の属性とACL、範囲内には統計を言及していません
あなたは、Javaオブジェクトを共有メモリー・サイズを理解していない場合は、以下を参照してください。Javaは、共有メモリサイズをオブジェクト
上記の各オブジェクトによって占有メモリサイズを推定し、ポインタの圧縮は、シーン64ビットオペレーティングシステムに電源が入りません
上記の分析は、ディレクトリとファイルHDFSの数が100百万ドルであったと仮定総ブロック場合に億、JVM名前空間の場合に全体のメモリ使用量:
- 合計(ディレクトリ)=(8 + 72 + 80)* 100M + 8 * num個(合計子供)
- 合計(ファイル)=(8 + 72 + 56)* 100M + 8 * NUM(全ブロック)
- 総メモリサイズは次のとおりです。合計(ディレクトリ)+合計(ファイル)
なぜ上記は100M、それを掛けていますか?100M = 100 * 1024 * 1024バイト= 104857600バイト、10億バイトにほぼ等しく、およびメモリ・ユニットのすべてのバイト上記は、我々は100百万億個のディレクトリのファイルに相当100Mを掛けているので
親子関係全体のディレクトリツリーの観点から、numが(合計子供)のディレクトリ・ノードとファイルノード合計です。NUM(総ブロック)は100百万円であります。だから、シーン上の名前空間は、総メモリによって占有されています。Total(Directory) + Total(Files) = (8 + 72 + 80) ∗ 100M + 8 * 200M + (8 + 72 + 56) ∗ 100M + 8 * 100M = 31.25G
JVMヒープメモリ空間内の名前空間の常駐メモリの存在下であっ名前ノードのライフサイクル全体、ならびにデータの信頼性を確保するために、名前ノード定期的に施し、チェックポイントは、名前空間は、外部記憶装置(すなわち、FSImageとEditsLogに実体化されますメカニズム)。データサイズの増加に伴い、ファイル/ディレクトリツリーの数もリニア同期によって占められ、全体的な名前空間JVMのメモリ空間が大幅に増加まま増加します。