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交互