沈阳格力专卖店 发表于 2016-12-10 10:34:03

Hadoop源代码分析(一八)

  DataNode的介绍基本告一段落。我们开始来分析NameNode。相比于DataNode,NameNode比较复杂。系统中只有一个NameNode,作为系统文件目录的管理者和“inode表”(熟悉UNIX的同学们应该了解inode)。为了高可用性,系统中还存在着从NameNode。
  先前我们分析DataNode的时候,关注的是数据块。NameNode作为HDFS中文件目录和文件分配的管理者,它保存的最重要信息,就是下面两个映射:
文件名à数据块
数据块àDataNode列表
  其中,文件名à数据块保存在磁盘上(持久化);但NameNode上不保存数据块àDataNode列表,该列表是通过DataNode上报建立起来的。
  下图包含了NameNode和DataNode往外暴露的接口,其中,DataNode实现了InterDatanodeProtocol和ClientDatanodeProtocol,剩下的,由NameNode实现。
  http://caibinbupt.iyunv.com/upload/attachment/57281/3158fcba-6f4f-3e16-8fd8-0fd2a3da9343.jpg
  ClientProtocol提供给客户端,用于访问NameNode。它包含了文件角度上的HDFS功能。和GFS一样,HDFS不提供POSIX形式的接口,而是使用了一个私有接口。一般来说,程序员通过org.apache.hadoop.fs.FileSystem来和HDFS打交道,不需要直接使用该接口。
  DatanodeProtocol:用于DataNode向NameNode通信,我们已经在DataNode的分析过程中,了解部分接口,包括:register,用于DataNode注册;sendHeartbeat/blockReport/blockReceived,用于DataNode的offerService方法中;errorReport我们没有讨论,它用于向NameNode报告一个错误的Block,用于BlockReceiver和DataBlockScanner;nextGenerationStamp和commitBlockSynchronization用于lease管理,我们在后面讨论到lease时,会统一说明。
  NamenodeProtocol用于从NameNode到NameNode的通信。
  下图补充了接口里使用的数据的关系。
http://caibinbupt.iyunv.com/upload/attachment/57394/bd754368-2701-36c9-a105-0ed6f6d15944.jpg
页: [1]
查看完整版本: Hadoop源代码分析(一八)