前面我们介绍了hdfs是分布式文件存储系统,所以那么数据文件是如何存储到DataNode节点的呢,这里我们先上一张图看看:
这里我们从网上找的这张图片,完整的展示了整个数据文件是如何被写入到datanode节点上的。下面来具体阐述下整个流程:
1. hdfs client 发起⽂件上传请求,通过 RPC 与 NameNode 建⽴通讯, NameNode 检查⽬标⽂件是否已存在,如果对应的文件夹下面已经存在这个文件,则直接返回文件已存在,如果不存在则可以继续上传,进行步骤2 2. hdfs Client 请求NameNode进行第一个block的上传,需要让NameNode返回这个block块应该存放在哪些 DataNode 服务器节点上; 3. NameNode 根据配置⽂件中指定的备份数量及机架感知原理进⾏⽂件分配, 返回可⽤的DataNode 的地址如:DataNode1, DataNode2, DataNode3; 4. Client 请求 3 台 DataNode 中的⼀台 DataNode1 上传数据(本质上是⼀个 RPC 调⽤,建⽴ pipeline),DataNode1 收到请求会继续调⽤ DataNode2,然后 DataNode2 调⽤ DataNode3,将整个 pipeline 建⽴完成, 后逐级返回client; 5. Client 开始往 DataNode1 上传第⼀个 block(先从磁盘读取数据放到⼀个本地内存缓存),以 packet为单位(默认64K),DataNode1 收到⼀个 packet 就会传给 DataNode2,DataNode2 传给 DataNode3。DataNode1 每传⼀个 packet 会放⼊⼀个应答队列等待应答; 6. 数据被分割成⼀个个 packet 数据包在 pipeline 上依次传输,在 pipeline 反⽅向上, 逐个发送 ack(命令正确应答),最终由 pipeline 中第⼀个 DataNode1节点 将 pipelineack 发送给 Client; 7. 当⼀个 block 传输完成之后,Client 再次请求 NameNode 上传第⼆个 block,重复步骤 2;
备注:
1、关于hdfs文件的存储,每一个block块在节点充足的情况下,都会写入自己的副本,默认的副本数是3。
还没有评论,来说两句吧...