HDFS 写流程
写流程(上传文件流程)中的三个角色
Client(客户端)
用户通过客户端与 HDFS 进行交互
NameNode
接受客户端的请求
指定一组用于存储数据的 DataNode
DataNode
存储数据
1. Client 向 NameNode 申请上传文件
2. NameNode 判断是否允许上传文件
文件是否已存在
用于存储文件的目录是否存在
3. NameNode 返回允许上传
4. Client 对文件按照 blocksize 进行切片
block size 默认是 128M
5. Client 向 NameNode 申请上传 block1
6. NameNode 挑选 replication 个 DataNode
replication 默认值是 3
尽量避免挑选存储太满或者工作太忙的 DataNode
多个 DataNode 的位置尽可能分散
7. 返回挑选的 DataNode 列表
dn1, dn2, dn6
8. Client 发送 block1 给 DataNode1
DataNode1 发送 block1 给 DataNode2
DataNode2 发送 block1 给 DataNode6
9. DataNode6 回复 DataNode2 接收完毕
DataNode2 回复 DataNode1接收完毕
DataNode1 回复 Client 接收完毕
10. DataNod1,DataNod2,DataNode6
向 NameNode 汇报接收 block1 完毕
11. Client 继续向 NameNode 申请上传下一个 block
HDFS 读流程
读流程(下载文件流程)中的三个角色
Client(客户端)
用户通过客户端与 HDFS 进行交互
NameNode
接受客户端的请求
指定一组用于下载数据的 DataNode
DataNode
下载数据
1. Client 向 NameNode 申请下载文件
2. NameNode 查询文件的元数据,
为每个 block 挑选一个用于下载的 DataNode
3. 返回挑选的 DataNode 列表
block1: DataNode1
block2: DataNode2
…
4. Client 向 DataNode1 申请下载 block1
5. DataNode1 发送 block1 给 Client
6. Client 依次从 DataNode 下载所有 block
7. Client 合并所有 block 为文件