HDFS读写文件

HDFS读写文件
HDFS读文件:
  首先,由Client下达命令交给Distributed File System系统翻译成Linux命令,然后把命令发送给NameNode,NameNode去搜索fsimage和edit logs,搜到以后把文件的块地址(get block locations)返回给Client,Client到对应的DataNode地址去读信息,优先级为:主副本>同机架副本>相邻机架副本.最后返回一个FSDataInputStream对象给Client,然后close这个流,Client获取对应信息

HDFS写文件
  首先,调用Distributed File System的create方法创建新文件,Client写数据到DFSOutputStream,DFSOutputStream分包,每128M一块,向NameNode申请blocks,获取用来存储replications的合适的datanode列表,然后通过FSDataOutputStream来把包输出到DataNode中的第一个节点上,此为主节点,将该包存储以后传递给同机架下的第二个节点,存储后再传递给相邻机架上的第三个节点.在最后一个DataNode存储完毕后会返回一个ack packet(确认队列),当Client成功收到DataNodeff返回的ack packet后,通知DataNode把文件标示为已完成,移除相应的packet并关闭FSDataOutputStream
  如果传输过程中,某个DataNode出现故障:
出现故障的DataNode会被移除,文件会继续被写到剩余的DataNode中,因为此数据块的副本数没有达到配置要求,NameNode会分配一个新的DataNode,随后的文件会正常执行写入操作,保持replications设定的数量.
当Client结束写入数据,调用Stream的close()方法关闭数据流
在这里插入图片描述

以上仅供个人理解所用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值