八、HDFS数据的读写流程
1.数据写入流程
- 客户端向NameNode发起请求
- NameNode审核权限、剩余空间后,满足条件允许写入,并告知客户端写入的DataNode地址
- 客户端向指定的DataNode发送数据包
- 被写入数据的DataNode同时完成数据副本的复制工作,将其接收的数据分发给其它DataNode
- 如上图,DataNode1复制给DataNode2,然后基于DataNode2复制给Datanode3和DataNode4
- 写入完成客户端通知NameNode,NameNode做元数据记录工作
注意事项:
- NameNode不负责数据写入,只负责元数据记录和权限审批
- 客户端直接向1台DataNode写数据,这个DataNode一般是离客户端最近(网络距离)的那一个
- 数据块副本的复制工作,由DataNode之间自行完成(构建一个PipLine,按顺序复制分发,如图1给2, 2给3和4)
2.数据读取流程
- 客户端向NameNode申请读取某文件
- NameNode判断客户端权限等细节后,允许读取,并返回此文件的block列表
- 客户端拿到block列表后自行寻找DataNode读取即可
注意事项:
- 数据同样不通过NameNode提供
- NameNode提供的block列表,会基于网络距离计算尽量提供离客户端最近的,这是因为1个block有3份,会尽量找离客户端最近的那一份让其读取
3.HDFS中网络距离计算方法
- 最近的距离就是在同一台机器
- 其次就是同一个局域网(交换机)
- 再其次就是跨越交换机
- 再其次就是跨越数据中心