Hadoop笔记四之Hdfs文件读写操作

10 篇文章 0 订阅
4 篇文章 0 订阅

读操作

1:FileSystem对象会调用open方法访问NameNode。FileSystem实际上是DistributedFileSystem实例,此实例中包含DFSClient属性,再通过此属性调用ClientProtocol从而实现访问namenode。

2:NameNode会读取已经存在于内存的fsimage文件从中找出block信息并返回第一批block地址,每个block会按照副本数返回多个地址,每个地址位于不同的DataNode上,这些block地址都是经过Hadoop拓扑排序,离DFSClient最近的排在第一位其他依次类推。

3:获取地址之后DFSClient会调用FSDataInputStream读取block信息,当第一批block读完后会再去NameNode拿第二批block地址,直到所有的block都读完最后关闭FSDataInputStream。在这个一过程中数据是持续不断的从DataNode流向DFSClient的。

4:如果FSDataInputStream在读取block时和DataNode通讯中断,FSDataInputStream就会尝试读取排在第二位的block地址就是另一个DataNode。读取剩余block时就会跳过出现异常的DataNode。另外FSDataInputStream每发现一个坏的DataNode就会报告给NameNode。

 

 

写操作

1:FileSystem对象会调用create方法通过ClientProtocol访问NameNode向它申请空间执行写操作。

2:NameNode会检查是否有空闲空间/是否有权限/文件是否已存在等,不通过会报IO异常。通过后在edits文件中为其分配DataNode并将第一个block地址分配给DFSClient。

3:DFSClient会通过DFSOutputStream向DataNode中写数据,如果按照副本数还有其他的DataNode(副本为3就会有3个DataNode),当第一个DataNode写完后剩余的DataNode之间会进行通讯依次向其他DataNode写入数据,每个DataNode写完毕后会告诉前面的DataNode已经写完了,当所有的DataNode写完后DFSClient会调用close方法关闭DFSOutputStream,NameNode会更新自己的信息,此时DFSClient就会看到之前写入的信息。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值