hadoop分析之三org.apache.hadoop.hdfs.server.namenode各个类的功能与角色

NameNode.java: 主要维护文件系统的名字空间和文件的元数据,以下是代码中的说明。
[java] view plain copy print?
  1. /********************************************************** 
  2.  * NameNode serves as both directory namespace manager and 
  3.  * "inode table" for the Hadoop DFS.  There is a single NameNode 
  4.  * running in any DFS deployment.  (Well, except when there 
  5.  * is a second backup/failover NameNode.) 
  6.  * 
  7.  * The NameNode controls two critical tables: 
  8.  *   1)  filename ->blocksequence (namespace) 
  9.  *   2)  block ->machinelist ("inodes") 
  10.  * 
  11.  * The first table is stored on disk and is very precious. 
  12.  * The second table is rebuilt every time the NameNode comes 
  13.  * up. 
  14.  * 
  15.  * 'NameNode' refers to both this class as well as the 'NameNode server'. 
  16.  * The 'FSNamesystem' class actually performs most of the filesystem 
  17.  * management.  The majority of the 'NameNode' class itself is concerned 
  18.  * with exposing the IPC interface and the http server to the outside world, 
  19.  * plus some configuration management. 
  20.  * 
  21.  * NameNode implements the ClientProtocol interface, which allows 
  22.  * clients to ask for DFS services.  ClientProtocol is not 
  23.  * designed for direct use by authors of DFS client code.  End -users 
  24.  * should instead use the org.apache.nutch.hadoop.fs.FileSystem class. 
  25.  * 
  26.  * NameNode also implements the DatanodeProtocol interface, used by 
  27.  * DataNode programs that actually store DFS data blocks.  These 
  28.  * methods are invoked repeatedly and automatically by all the 
  29.  * DataNodes in a DFS deployment. 
  30.  * 
  31.  * NameNode also implements the NamenodeProtocol interface, used by 
  32.  * secondary namenodes or rebalancing processes to get partial namenode's 
  33.  * state, for example partial blocksMap etc. 
  34.  **********************************************************/  
FSNamesystem.java:  主要维护几个表的信息:维护了文件名与block列表的映射关系;有效的block的集合;block与节点列表的映射关系;节点与block列表的映射关系;更新的heatbeat节点的LRU cache
[java] view plain copy print?
  1. /*************************************************** 
  2.  * FSNamesystem does the actual bookkeeping work for the 
  3.  * DataNode. 
  4.  * 
  5.  * It tracks several important tables. 
  6.  * 
  7.  * 1)  valid fsname --> blocklist  (kept on disk, logged) 
  8.  * 2)  Set of all valid blocks (inverted #1) 
  9.  * 3)  block --> machinelist (kept in memory, rebuilt dynamically from reports) 
  10.  * 4)  machine --> blocklist (inverted #2) 
  11.  * 5)  LRU cache of updated -heartbeat machines 
  12.  ***************************************************/  
INode.java: HDFS将文件和文件目录抽象成INode。
[java] view plain copy print?
  1. /** 
  2.  * We keep an in-memory representation of the file/block hierarchy. 
  3.  * This is a base INode class containing common fields for file and 
  4.  * directory inodes. 
  5.  */  
FSImage.java: 需要将INode信息持久化到磁盘上FSImage上。
[java] view plain copy print?
  1. /** 
  2.  * FSImage handles checkpointing and logging of the namespace edits. 
  3.  * 
  4.  */  
FSEditLog.java:写Edits文件
[java] view plain copy print?
  1. /** 
  2.  * FSEditLog maintains a log of the namespace modifications. 
  3.  * 
  4.  */  
BlockInfo.java:INode主要是所文件和目录信息的,而对于文件的内容来说,这是用block描述的。我们假设一个文件的长度大小为Size,那么从文件的0偏移开始,按照固定大小,顺序对文件划分并编号,划分好的每一块为一个block
[java] view plain copy print?
  1. /** 
  2.  * Internal class for block metadata. 
  3.  */  
DatanodeDescriptor.java:代表的具体的存储对象。
[java] view plain copy print?
  1. /************************************************** 
  2.  * DatanodeDescriptor tracks stats on a given DataNode, 
  3.  * such as available storage capacity, last update time, etc., 
  4.  * and maintains a set of blocks stored on the datanode. 
  5.  * 
  6.  * This data structure is a data structure that is internal 
  7.  * to the namenode. It is *not* sent over- the- wire to the Client 
  8.  * or the Datnodes. Neither is it stored persistently in the 
  9.  * fsImage. 
  10.  
  11.  **************************************************/  
FSDirectory.java: 代表了HDFS中的所有目录和结构属性
[java] view plain copy print?
  1. /************************************************* 
  2.  * FSDirectory stores the filesystem directory state. 
  3.  * It handles writing/loading values to disk, and logging 
  4.  * changes as we go. 
  5.  * 
  6.  * It keeps the filename->blockset mapping always- current 
  7.  * and logged to disk. 
  8.  * 
  9.  *************************************************/  
EditLogOutputStream.java:所有的日志记录都是通过EditLogOutputStream输出,在具体实例化的时候,这一组EditLogOutputStream包含多个EditLogFIleOutputStream和一个EditLogBackupOutputStream
[java] view plain copy print?
  1. /** 
  2.  * A generic abstract class to support journaling of edits logs into 
  3.  * a persistent storage. 
  4.  */  
EditLogFileOutputStream.java: 将日志记录写到edits或edits.new中。
[java] view plain copy print?
  1. /** 
  2.  * An implementation of the abstract class {@link EditLogOutputStream}, which 
  3.  * stores edits in a local file. 
  4.  */  
EditLogBackupOutputStream.java:将日志通过网络发送到backupnode上。
[java] view plain copy print?
  1. /** 
  2.  * An implementation of the abstract class {@link EditLogOutputStream}, 
  3.  * which streams edits to a backup node. 
  4.  * 
  5.  * @see org.apache.hadoop.hdfs.server.protocol.NamenodeProtocol#journal 
  6.  * (org.apache.hadoop.hdfs.server.protocol.NamenodeRegistration, 
  7.  *  int, int, byte[]) 
  8.  */  
BackupNode.java:name Node的backup:升级阶段:Secondary Name Node -》Checkpoint Node(定期保存元数据,定期checkpoint) -》Backup Node(在内存中保持一份和Name Node完全一致的镜像,当元数据发生变化时,其元数据进行更新,可以利用自身的镜像来checkpoint,无需从nameNode下载)-》Standby Node(可以进行热备)
[java] view plain copy print?
  1. /** 
  2.  * BackupNode. 
  3.  * <p> 
  4.  * Backup node can play two roles. 
  5.  * <ol> 
  6.  * <li>{@link NamenodeRole#CHECKPOINT} node periodically creates checkpoints, 
  7.  * that is downloads image and edits from the active node, merges them, and 
  8.  * uploads the new image back to the active. </li> 
  9.  * <li>{@link NamenodeRole#BACKUP} node keeps its namespace in sync with the 
  10.  * active node, and periodically creates checkpoints by simply saving the 
  11.  * namespace image to local disk(s).</li> 
  12.  * </ol> 
  13.  */  
BackupStorage.java:在Backup Node备份目录下创建jspool,并创建edits.new,将输出流指向edits.new
[java] view plain copy print?
  1. /** 
  2.  * Load checkpoint from local files only if the memory state is empty.<br> 
  3.  * Set new checkpoint time received from the name -node. <br> 
  4.  * Move <code>lastcheckpoint.tmp </code> to <code>previous.checkpoint</code> . 
  5.  * @throws IOException 
  6.  */  
TransferFsImage.java:负责从name Node去文件。
[java] view plain copy print?
  1. /** 
  2.  * This class provides fetching a specified file from the NameNode. 
  3.  */  
GetImageServlet.java:是httpServlet的子类,处理doGet请求。
[java] view plain copy print?
  1. /** 
  2.  * This class is used in Namesystem's jetty to retrieve a file. 
  3.  * Typically used by the Secondary NameNode to retrieve image and 
  4.  * edit file for periodic checkpointing. 
  5.  */  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值