2013年6月18日星期二

Hadoop 2.0 Datanode

Hadoop 2.0 Datanode 更加细分,将结构分为两个大部分。
DataNode相当于一个包装转发器,将请求发送给相应的处理单元。
DataNode 分为以下两部分:
1、与NameNode汇报的逻辑,block report,heartbeat
2、底层与文件系统交互的datanode 存储逻辑

其中第一部分的调用如下:
DataNode --->  BlockProolManager  --->  BPOfferService  --->   BPServiceActor
第二部分的调用如下:
DataNode  --->  FSDataSetImpl     --->     FSVolumeList(FSVolume)     --->     BLockPoolSlice

DataNode启动流程:
1、Main
2、StartDatanode
3、初始化BlockPoolManager
4、doRefreshNamenodes
     从配置里面读出相应的namespace id,namenode id(HA)
     初始化BPOfferService,每个namespace对应一个BPOfferService。
     初始化BPActor,每个namenode对应一个BPActor,即Active NameNode和StandbyNameNode各对应一个BPActor。
5、启动所有的BPActor。
     BPActor启动过程如下:
     (1)与NameNode进行handshake,首先建立BPActor对NameNode的RPC连接
     (2)获得namespace info,比较一下与现有的version,目前不会由于svn version不一致直接报错了
     (3)verifyAndSetNamespaceInfo,BPOfferService搞定后,调用DataNode的initBlockPool
     首先向BlockPoolManager注册该BPOfferService。在这个阶段,初始化FSDataSet,初始化存储层,初始化FSVolume,初始化FSVolumeList和ReplicaMap。启动DataBlockScanner和DirectoryScanner。向底层的文件交互FSVolume注册该BlockPool
     (4)handshake第二部,向NameNode注册,NameNode向其内部的DataNode注册该DataNode

     (5)设置BlockReport的细节