写流程
client 客户端
- 1 ->namenode //hdfs client内的distributedfilesystem 向namenode 请求上传文件 test.txt
- 3 ->namenode //请求上传第一个block(0-128m) 请求返回datanode
- 5 ->datanode //hdfs client 内的fsdataoutputstream 请求建立block 传输通道->dn1
- 7 ->datanode //客户端上传第一个blcok(先从磁盘读取数据放到一个本地内存空间缓存),
- 以packet为单位 dn1 收到后会传给dn2 dn2 传给dn3 dn1每传一个packet会放入一个应答队列等待应答
- 8 当第一个block传输成功之后 客户端再次请求上传第二个block服务
namenode
- 2=检查目录树是否可以创建文件
- 检查权限
- 检查目录结构
- 2.1->client
- 相应可以上传文件
- 4 ->client
- 返回dn1 dn2 dn3 节点 表示采用这三个节点存储数据
datanode
- 5 da1->da2 da2 ->da3 请求建立通道
- 6 da3 ->da2 da2->da1 应答成功 dn1->hdfs client 内的fsdataoutputstream
读流程
client
- 1 client 通过distrubutedfilesystem向—>namenode请求下载文件
- 3 cleint 通过fsdatainputstream 请求datanode 读取数据blk_1
- 客户端以 Packet 为单位接收,先在本地缓存,然后写入目标文件。
namenode
- 2 namenode 通过查询元数据 找到文件块所在的datanode地址 —>client
datanode
- 4 开始传输数据给客户端(从磁盘里面读取数据输入流,以 Packet 为单位 来做校验)。