Datanode 的实现
1. 数据块存储
1.1 数据节点的磁盘目录文件结构
${dfs.data.dir} 数据目录
blocksBeingWritten 正在写的数据块,由客户端发起current 已经写入的数据块detach 配合升级的临时路径tmp 数据块复制引发的,保存正在写的数据块
${dfs.data.dir}/current
HDFS数据块meta 校验信息
1.2 数据节点存储的实现
DataStorage 专注于节点存储空间的生存期管理FSDataset 创建数据块文件,维护数据块文件和数据块校验信息文件的关系。
1.3 数据节点升级
2. 流式接口的实现
TCP服务器
读数据
参数
blockIdgenerationStampstartOffsetlengthclientNameaccessToken
零拷贝
[外链图片转存失败(img-2ffBe0ka-1563433728871)(C:\Users\pphe\AppData\Roaming\Typora\typora-user-images\1563271268890.png)]
写数据
参数
blockIdgenerationStamppipelineSizeisRecoveryclientNamehasSrcDataNodesrcDataNodenumTargetstargetsaccessTokenchecksum
3. 作为整体的datanode
datanode 和 namenode 的交互
握手、注册、数据块上报和心跳namenode指定的执行
数据块扫描器
每个数据节点都会执行一个数据块扫描器DataBlockScanner,周期性的验证节点所存储的数据块,汇报给datanode。
datanode的启停
datanode的启动
初始化数据节点注册启动数据节点的对外服务
datanode 的停止
停止数据节点上的HTTP服务器和远程接口的IPC服务器数据点的成员变量shouldRun被设置为false。停止流式接口的相关服务