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的细节
没有评论:
发表评论