HDFS读写流程

在HDFS的读写流程中,主要是分为HDFS的读流程和写流程。其中先由HDFS写数据,之后HDFS才可以读流程。

HDFS写流程

  1. Client向NameNode发送消息,通过RPC与NameNode建立通信,其中的信息主要包括要进行写的用户,要写的文件,保存数据的地址。NameNode在接受到Client发送的消息之后,会判断该用户是否有写数据的权限,检测写的文件是否已经存在,检测要保存文件的地址是否存在。若上述的三个条件都满足,则会返回一个确定消息个Client,否则直接报错。
  2. Clinet在接收到NameNode的确认信息之后,会按照切片规则,对文件进行切片。切片完成后,向NameNode发送消息,请求获得保存第一个block的DataNode地址。
  3. NameNode收到Client发送的地址请求之后,根据机架感知原则和副本机制(默认3份),返回存放block的DataNode地址。
  4. Client接收到DataNode节点A的地址之后,通过RPC与DataNode节点A建立通信,建立pipline通道,之后DataNode节点A与DataNode节点B建立通信,DataNode节点B与DataNode节点C建立通信,完成整个pipline的建立。A、B、C通讯建立完成后,从C->B->A逐级返回确认信息,之后由A返回给Client。
  5. Client将块block分割成packet后依次发送给DataNode节点A,DataNode节点A收到一个packet后,将该packet从A发送给B,B在接受到之后传给C。A每传输完成一个packet后,就会放入一个应答队列等待应答信息,以确保A、B、C都完成packet存储传输。
  6. 当packet在pipline中进行传输的时候DataNode节点B和DataNode节点C会在pipline进行反方向ack确认,最终由DataNode节点A将确认ACK发送给client。
  7. 当Client接受到block的传确认信息后,向NameNode请求下一个block的DataNode地址,开始第二个block的传输。

HDFS读流程

  1. Client向NameNode发送请求,请求的内容包括:要读取的文件,读取的用户。
  2. NameNode接受到Client发送的请求后,会查验这个文件是否存在,用户是否具有权限,若不符合则报错。若符合情况,则会返回block的列表信息,每个block的列表信息包括含有该block副本的DataNode地址。
  3. DataNode的地址返回到Client后,会按照集群拓扑原则进行排序。
  4. Client选取排序最靠前的DataNode进行读取block。读取过程就是与DataNode建立Socket Stream并调用DatainputStream的read方法来读取文件,直到这个block的信息读取完成。
  5. 当Client读取完NameNode返回的block列表之后,若文件还没有读取结束,client则会继续向NameNode发送请求,获得下一批的block列表信息。
  6. 在读取过程中,每读取完一个block后,都会进行checksum验证,若出现问题,client则会通知NameNode,并从下一个拥有该block的DataNode中读取数据。
  7. 当所有的block读取完仇,client会将读到的block汇总成一个完整的文件。

网络拓扑排序规则:网络拓扑结构中与Client距离最近的往前排,心跳机制汇报超时的往后排。确保距离最近,DataNode还正常工作。
在读流程中,NameNode不会返回块的数据,只会返回block的存储的DataNode地址。并且,在Client读取的过程中,通过read方法,会同时读取多个block信息。

欢迎各位指正交流

文章内容为作者学习过程中,查阅资料的自己总结,若有不当之处,还请联系作者改正,敬请不吝赐教

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值