文章目录
1. HDFS的读写流程
1.1 HDFS读流程
- 客户端首先向Namenode发送读取请求,询问要读取的文件存储在哪些数据节点上。
- Namenode会根据机架感知原理、网络拓扑关系、副本机制等返回部分或者全部的block所在的Datanode的地址。
- 客户端根据Namenode返回的地址,选择一个距离最近的Datanode节点来读取第一个数据块。客户端直接与该数据节点建立连接,并发送读取请求。
- Datanode接收到读取请求后,开始从磁盘上读取相应的数据块,并将数据通过网络传输给客户端。
- 客户端在接收数据的同时,会对数据进行校验,以确保数据的完整性。如果发现数据损坏,客户端可以向其他包含该数据块副本的数据节点请求重新读取。
- 当客户端读取完一个Datanode后,会根据Namenode提供的块位置信息,选择下一个数据节点来读取下一个数据块。重复上述步骤,直到客户端读取完整个文件。
1.2 HDFS写流程
- 客户端向Namenode发送写入请求。
- Namenode接收到写入请求后,首先判断当前这个操作的用户是否具有写入权限,如果不具备写入权限会直接报错;如果有写入权限,再进行判断在写入的目录下是否存在这个文件;如果要写入的目录下已经存在这个文件,会直接报错;如果要写入的目录下不存在这个文件,通知客户端可以写入。
- 客户端对文件进行切分操作,形成block块。
- 客户端请求第一个block块存储在哪些地方。
- Namenode根据机架感知原理、拓扑关系、副本机制等,找到相应的可以上传的Datanode的连接列表,