HDFS中读数据 , 写数据 , 删数据 的执行流程

一、读流程

  1. 客户端发起RPC请求到NameNode

  2. NameNode在收到请求之后会先校验这个文件是否存在。如果存在,那么会将这个文件所对应的Block的存储地址放入一个队列(保证顺序)中返回给客户端, 每个文件都可以读,所以此处不需要验证用户的权限.

  3. 客户端收到队列之后会从队列中将每一个Block对应的地址依次取出,从每一个Block对应的3个地址中取出一个较近(较近是指客户端与存储Block的节点之间的距离, 两者之间经过的交换机个数越少距离越近)的地址来进行读取

  4. 读取完一个Block之后,对这个Block进行一次checksum的验证 - 验证这个Block的数据总量是否准确;如果不一致,则说明该Block产生损坏,客户端会通知NameNode,然后再从其他节点上重新读取该Block

  5. 如果读完一个Block会读取下一个Block,直到这一次的所有的Block全部读完

  6. 客户端在读完这一批地址会向NameNode要下一批的地址

  7. 等读完所有的Block,客户端会给NameNode发送消息通知NameNode关闭文件

            

二、写流程(上传文件)

  1. 客户端发起RPC请求到NameNode,这个请求包含对文件信息的描述

  2. NameNode收到请求之后,校验这个用户的权限;如果校验通过,则检查这个路径下是否有同名文件,如果没有同名文件,则允许写入

  3. NameNode计算这个文件需要的地址数量(即block及复本数量),然后会给每个block分配对应的地址,并且将地址放入队列中返回给客户端

  4. 客户端在收到地址之后,将数据进行封包(packets),写入DataNode

  5. 在写Block的时候,会从分配的三个地址中选取一个较近的节点将数据写入。在写完一个Block之后,这个DataNode节点自动的通过Pipeline(管道,实际上基于NIO的Channel)将这个Block备份到其他节点上构成指定的复本数量

  6. 节点之间依次传递ACK信号表示备份成功,在客户端收到ACK之后会继续写下一个Block

  7. 客户端写完所有的Block之后会通知NameNode关流,此时这个文件更改为不可写

            

三、删流程

  1. 客户端发起RPC请求到NameNode

  2. NameNode收到请求之后,校验这个文件是否存在,如果存在,校验这个客户端是否有删除权限,如果有权限则允许删除。

  3. 在通过校验之后,NameNode就会将这个操作记录到edits_inprogress文件中,然后修改内存中的元数据,最后向客户端返回ack表示删除成功。此时数据并没有从HDFS上移除

  4. NameNode等待DataNode的心跳,通过DataNode的心跳信息校验DataNode上是否有要删除的数据,如果有要删除的数据,则NameNode会给对应的DataNode发送指令删除指定的数据,DataNode在接收到指令才会删除。此时数据才真正从HDFS上移除

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值