HDFS源码阅读(2)--DataNode实现

来源:互联网 发布:linux进入编辑模式 编辑:程序博客网 时间:2024/05/27 06:12

DatanodeID

DatanodeID用于唯一标识一个Datanode节点


DatanodeInfo

DatanodeInfo存储了一个Datanode的相关状态信息,主要用于Datanode和client之间的相互通信


BlockSender

BlockSender用于向接收端发送数据。

数据的大小关系:Block->Packet->Chunk


BlockReceiver

BlockReceiver是Datanode节点上的数据块接收器


DataBlockScanner

DataBlockScanner用于保证Datanode上数据块的完整性,定期扫描Datanode磁盘上存储的所有块,防止造成数据损坏


FSDataset

FSDataset主要用于管理Datanode上的Block,所有与Block相关的操作都在FSDataset相关的类中处理。

Block对应着两个文件,一个存数据,一个存元数据信息,如blk_2356和blk_2356.meta

Datanode上存储结构的大小依次是卷FSVolume,目录FSDir,文件Block和元数据


FSVolume

FSVolume类对应着是某一个Storage。数据块文件,detach文件和临时文件都是通过FSVolume来管理


FSVolumeSet

FSVolumeSet对所有的FSVolume对象进行管理,实际就是对所有的存储路径进行管理,主要为Datanode进程提供存储数据块选择一个存储路径(分区),就是为该数据块创建一个对应的本地磁盘文件,同时也负责统计它的存储空间的状态信息和收集所有的数据块信息


DataXceiverServer

DataXceiverServer用于创建一个ServerSocket来接受请求,每接受一个连接,就创建一个DataXceiver用于处理请求,并将Socket存在一个名为childSockets的Map中。

此外还创建一个BlockBalanceThrottler对象用来控制DataXceiver的数目以及流量均衡。


DataXceiver

在Datanode中,块数据的接收和发送主要是通过tcp连接,而不是rpc


Datanode

Datanode实现了InterDatanodeProtocol接口用来和Client交互,实现ClientDatanodeProtocol用来和Datanode交互

原创粉丝点击