1.hdfs读流程
- 客户端跟namenode通信查询元数据,namenode通过查询元数据,找到数据快所在的datanode服务器(hadoop01,hadoop02,hadoop03).
- namenode将datanode服务器信息返回给客户端.
- 客户端就近随机挑选一台datanode服务器请求建立socket流.
- datanode开始发送数据,以packet为单位(64k).
- 客户端以packet为单位接收,先在本地缓存,然后写入到目标文件.
2.hdfs写流程
- 客户端跟namenode通信请求上传文件,namenode去查找文件是否存在,父目录是否存在,用户是否有权限
- namenode返回是否可以上传
- 客户端请求上传第一个block,该传输到哪些datanode服务器上
- namenode返回给客户端datanode服务器bloc(hadoop01,hadoop02,hadoop03)
- 客户端请求3台datanode中的一台hadoop01上传数据(本质上是rpc的调用,建立起管道),hadoop01收到请求后会继续调用hadoop02,然后hadoop02再调用hadoop03,将整个管道建立完成,然后逐级返回客户端
- 客户端开始往hadoop01上传第一个block(先从磁盘读取数据放入到本地内存缓存),以packet为单位发送,hadoop01收到一个packet就会传给hadoop02,
hadoop02再传给hadoop03;hadoop01每传一个packet就会将packet放入到应答队列中等待应答.
- 当一个block传输完成之后,客户端会再次请求namenode上传第二个block到哪些datanode服务器.