浅谈HDFS读写数据过程内部原理

                       浅谈HDFS读写数据过程内部原理

 文章开始把我喜欢的这句话送个大家:这个世界上还有什么比自己写的代码运行在一亿人的电脑上更酷的事情吗,如果有那就是让这个数字再扩大十倍。

本文将详细解释HDFS读写数据过程中系统底层究竟发生了什么以及其具体实现,希望可以帮助理解。

首先读数据过程:

HDFS客户端发出读数据命令之后

configuration conf =new Configration();//配置文件,加载core-site.xml  hdfs-site.xml 得到读写的地址

FileSystem fs=FileSystem.get(conf);//这一过程在底层实际上完成了FileSystem抽象类生成子类Distributed Filesystem 并实例                                                         化对象fs 的过程,真正对分布式文件进行操作的也是DistributedFileSystem的对象fs

path filename=new Path("url");

FSDataInputStream is=fs.open(filename);//此时会在内部创建一个输入流FSDateInputStream,输入流FSDateInputStream对                                                                 应着底层的DFSDateInputStream,由这个DFSInputStream 来对底层操作调用                                                                  ClientProtocal.getBlockLocation()方法得到NameNode的地址,进而得到                                                                           DataNode的地址,完成读的过程

而当读取的文件占用超过一个数据块时,会重复进行该过程读取剩下的文件所在的数据块。

以上便是读取数据的过程,我们可以发现操作数据的并不是我们程序员直接接触的FileSystem FSDataInputStream 等类,而是他们在底层对应的DistributedFileSystem以及DFSDataInputStream.

附上流程图:



写入的过程与读的过程类似,不在附加说明,唯一不同的是写入数据时HDFS采取流水线方法,当FSDataOutputStream 将数据写入第一个节点之后,会由第一个节点向第二个节点写入数据,一次向后达到备份的目的。

附上流程图:



加油吧,程序员!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值