HDFS的读写流程参与者有客户端(Client)和集群(NameNode和DataNode)。
2. 写数据流程写数据流程步骤(创建分布式文件系统):
1)客户端向NameNode请求上传xx文件;
2)NameNode进行校验,响应是否可以上传文件;
3)请求上传第一个Block(0-128M),请返回DataNode;
4)返回DataNode1,DataNode2,DataNode3节点,表示采用三个节点存储数据(首先考虑节点距离最近,再考虑负载均衡);
5)请求建立Block传输通道;
6)DataNode应答成功。
7)传输数据packet。
注:1个packet(516Byte)由chunk(512Byte)和chunksum(4Byte)构成;packet最小为64K,即积累到64K才能传输。
3. 节点距离计算HDFS写数据的时候,NameNode会选择节点距离最近上传数据到DataNode。
节点距离计算,指两个节点到达最近的共同祖先的距离总和。
4. 机架感知
3个副本时,HDFS的存储策略:
1)第一个副本在客户端所处的节点上随机选择一个,即本地机架,如果客户端在集群外,则随机选择一个;
2)第二个副本在另一个机架随机一个节点(保证可靠性);
3)第三副本在第二个副本所在机架的随机节点(兼顾效率)。
5. 读数据流程HDFS读数据流程(创建分布式文件系统):
1)客户端向NameNode请求下载xx文件;
2)NameNode向客户端返回目标文件元数据;
3)选择节点距离最近的DataNode请求读数据,兼顾考虑负载能力;
4)DataNode向客户端传输数据(串行读取数据)。
6. NN和2NN数据存储:
1)内存:计算速度快,但可靠性低;
2)磁盘:可靠性高,但计算速度慢。
HDFS(内存)中NameNode采用fsImage存储数据,Edits进行追加过程记录。
2NN的作用:定期将fsImage和Edits数据进行合并(每隔1h执行一次备份)。
区别:NN中记录了最新的edits_inprogress_xxx,2NN则没有,只有历史的edits文件。
7. FsImage和Edits介绍
8. DataNode工作原理
1)DataNode启动后主动向NameNode注册(Block的数据长度、校验和、时间戳);
2)DataNode周期性自查,同时上报信息(每隔6h);
3)心跳每3s一次,结果带有NameNode给DataNode的命令;
4)若超过3s未回复,再等待10分钟+30s,此时没有收到DataNode的心跳,则认为改DataNode不可用。
DataNode掉线时限参数设置:
Timeout = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval
9. HDFS数据的完整性CRC校验:对原始数据进行校验