Hadoop NameNodeの詳細

5607 ワード

NameNodeは、ファイルシステム全体の名前空間とファイルデータブロックのアドレスマッピング(Blockmap)をメモリに保存しています.NameNodeがダウンタイムした場合、クラスタ全体がマヒし、HDFS全体が格納可能なファイル数がNameNodeのメモリサイズに制限されます.この重要なメタデータ構造はコンパクトに設計されているため、4 Gメモリを持つNamenodeは大量のファイルとディレクトリをサポートするのに十分です.
一般に,単一namenodeクラスタの最大クラスタ規模は4000台である.
NameNode  :                    
NameNode  :HDFS         NameSpace。
NameNode  :     (FileSystem)                     (matedata) 
                             
NameNode  :namespace    (fsimage),      (edit log)
             Cache RAM ,                    。
NameNode  :                    。
                      ,                   。
               : nameNode   ,DataNode NameNode        NameNode

1、NameNodeメタデータ情報ファイル名、ファイルディレクトリ構造、ファイル属性(生成時間、コピー数、権限)各ファイルのブロックリスト.およびリスト内のブロックとブロックが存在するDataNodeとの間のアドレスマッピング関係メモリにロードされるファイルシステム内の各ファイルと各データブロックの参照関係(ファイル、block、datanode間のマッピング情報)データは、定期的にローカルディスクに保存されますが、blockの場所情報は保存されず、DataNode登録時に報告され、実行時にメンテナンスされます.
2、NameNodeファイル操作NameNodeファイルメタデータの操作DataNodeファイル内容の読み書き要求の処理を担当し、データストリームはNameNodeを経由せず、そのDataNodeに連絡することを尋ねる
3、NameNodeコピーファイルデータブロックがどのDataNodeに格納されるかは、NameNodeが決定する.NNがグローバル状況に応じてコピーを配置する決定をしてファイルを読み取る場合、NNはできるだけclientに最も近いdatanode上のコピーを読み取らせ、帯域幅消費と読み取り遅延を低減する
4、NameNode職責はデータブロックの複製を全権管理し、周期的にハートビートとブロックの状態報告情報(このDataNode上のすべてのデータブロックのリストを含む)を受け入れると、NNはDNが正常に動作していると判断し、10分後にDNのハートビートを受け入れられない場合、NNはDNがダウンしたと判断した場合、NNはDN上のデータブロックを再複製する準備をしている.ブロックのステータスレポートにはDN上のすべてのデータブロックのリストが含まれており、blocks reportは1時間ごとに送信されます.
5、NameNodeフォールトトレランスメカニズムNamenodeがなければ、HDFSは動作しない.実際、namenodeを実行するマシンが壊れた場合、システム内のファイルは完全に失われます.異なるdatanode上にあるファイルブロック(blocks)を再構築する方法は他にないからです.したがって,namenodeのフォールトトレランス機構は非常に重要であり,Hadoopは2つの機構を提供する.
1つ目の方法は、ローカルハードディスク(HDD)に格納されているファイルシステムのメタデータのバックアップを永続化することです.Hadoopは、Namenodeが異なるファイルシステムに永続化された状態のファイルを書き込むように構成することができます.この書き込み動作は同期的で原子化されている.一般的な構成は、ローカルハードディスク(HDD)に永続化された状態を書き込みながら、リモートマウントされたネットワークファイルシステム(NFS)に書き込むことです.
2つ目の方法は、補助的なNamenode(SecondaryNamenode)を実行することです.実際にSecondaryNamenodeはNamenodeとして使用できません.Namespaceミラーを定期的に操作ログファイル(edit log)に結合し、操作ログファイル(edit log)が大きすぎることを防止することが主な役割です.通常、SecondaryNamenodeは、統合操作に多くのCPU時間とNamenodeに相当するメモリを必要とするため、個別の物理マシン上で実行されます.セカンダリNamenodeは、マージされたNamespaceミラーのバックアップを保存しています.万が一、Namenodeがダウンタイムになったら、このバックアップを使用できます.
ただし、セカンダリNamenodeは常にプライマリNamenodeに遅れているため、Namenodeがダウンタイムした場合、データの損失は避けられません.この場合、一般的には、第1の方法で説明したリモートマウントネットワークファイルシステム(NFS)のNamenodeのメタデータファイルと組み合わせて使用し、NFSのNamenodeのメタデータファイルをセカンダリNamenodeにコピーし、セカンダリNamenodeをプライマリNamenodeとして実行する.
6、NameNode物理構造
  master   /home/wuhuan/hadoopdata/dfs/name,namesecondary 
  name/current,in_user.lock
    in_use.lock      ,    namenode    
    current     namenode        
    current/edits  ---  hdfs                  
    current/fsimage  ----     , edits  secondaryNamenode             。


VERSION:
    namespaceID           ,                   
             DataNode   NameNode    
  NameNode        DataNode,DataNode    NameNode       namespaceID

Edit Log
edits      ,   HDFS       ,                 editlog 。
      ,    。  、  、        ,      edit  。

    hdfs             edits   。
edits          。  hdfs   edits               。

namespace Image
fsimage      ,            ,     HDFS              。
                、        (      ,   ) 。
                   、    、     ;

    ,Fsimage       ,  hdfs   
      hdfs          ,     ,     datanode,     ,     。
【  】Block          fsimage, DataNode  NameNode              。

      namenode      edits ,      fsimage  ?
      fsimage namenode      ,    
                        ,        CPU。

                   fsimage   ,                        
        edits log ,   edits fsimage    fsimage 

7、Name Nodeファイル構造
        NameNode         :
  $ {dfs.name.dir}                    //dfs.name.dir       ,        
  $ {dfs.name.dir}/current/VERSION     //Java    ,      HDFS     
  $ {dfs.name.dir}/current/edits
  $ {dfs.name.dir}/current/fsimage
  $ {dfs.name.dir}/current/fstime

VERSION       :
      #Wed Mar 23 16:03:27  CST 2017
      namespaceID=1064465394    //          ,               
                                         DataNode   NameNode    
                                NameNode           DataNode
                                DataNode    NameNode        namespaceID。

      cTime=0                  //   NameNode         
                                        ,             。

      storageType=NAME_NODE     //             NameNode     
                                 DataNode      DATA_NODE

      layoutVersion=-18         //layoutVersion       ,   HDFS          
                                  HDFS       ,        (  -18   -19)
                                      ,HDFS       ,            

Nameノードのストレージディレクトリ
  edits、fsimage、fstime    (     )。    HadoopWritable        。
hdfs        namenode    ,EditLog/FsImage   namenode        
    EditLog    
                          。
                      ,                     。
                    ,               
                         。

          :
                    ,namenode   EditLog           。
           ,                 EditLog       。

    FsImage  
                       checkpoint。
                   ,          ,      
          fsimage                        
                           ,        、          。

               ,                    
            fsimage      (fsimage     GB  )。               
          NameNode  ,         fsimage               
                      。   ,    NameNode        。