hadoop-hdfs读写流程整理

hdfs读流程

在这里插入图片描述

  1. Client通过FileSystem.open(filePath)方法,
    与NN节点进行【rpc】协议通信,校验是否有权限是否存在,假如都ok,返回该文件的部分或全部的block的列表(包含各个block块的分布在DN地址的列表),也就是返回【FSDataInputStream】对象;
  2. Clinet调用FSDataInputStream.read方法
    a.与第一个块的最近的DN进行read,读取完成后,会check,假如ok,会关闭与当前的DN的通信;假如失败会记录块的这个副本+DN信息,下次就不会从这读取。那么就去该块的第二个DN的地址读取
    b.然后读取第二个块,如第一个
    c.假如block列表读取完成后,文件还未结束,那么FileSystem会从NN获取下一批次的block的列表。当然读操作对于client,就是透明的,感觉就是连续的数据流
  3. Client调用FSDataInputStream.close()方法,关闭输入流

hdfs写流程

在这里插入图片描述
1.Client调用FileSystem.create(filePath)方法,与NN进行【rpc】通信,检验该路径是否有权限创建是否文件存在,假如ok,就创建一个新的文件,但不关联任何的block,
返回一个【FSDataOutputStream】(假如不ok,直接返回错误,代码加try catch)。
2.Client调用FSDataOutputStream.write方法
a.将第一个块的第一个副本写入DN1,第一个副本写完传输给第二个DN2,第二个副本写完就传输给第三个DN3,当第DN3写完,就返回一个ack packet给DN2,DN2就返回ack packet给DN1,DN1就返回ack packet的FSDataOutputStream对象,标识第一个块的三个副本都写完了。
b.余下的块依次这样
3.当向文件写入数据完成后,Client调用FSDataOutputStream.close()方法
关闭输出流
4.再调用FileSystem.complete()方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值