HDFS------hadoop fs -get命令的代码执行过程

今天我们就来看看当输入./hadoop fs -get src des 时,代码中是如何执行的。

看过hadoop权威指南那本书,大家都知道当读取hdfs中的一个文件时,首先要向namenode咨询相关的数据块的信息,然后再和具体的datanode交互,将数据通过网络传过来,那么我们就从代码中看看这个过程的轨迹。

从/bin/hadoop脚本中可以很容易看到调用的是FsShell的main方法:

FsShell.main()--->ToolRunner.run()--->FsShell.run()--->copyToLocal(argv, i);


很容易可以看到读文件的时候DFSClient是通过DFSInputstream来做具体的工作的,那么我们就先来看下DFSInputstream的类图:

从第一副图(序列图)中可以看到读操作分为两个阶段,一个是调用DFSInputstream的openInfo方法和namenode联系;另一个阶段是通过read方法调用blockSeekTo方法来和datanode联系,从而实现读数据操作。

在这里简要地看下DFSInputstream的read方法。read方法每次都用一个buffer(默认大小为4k)来从输入流中读数据(把buffer读满),其中currentNode = blockSeekTo(pos);用来确定当前要读哪个datanode,然后真正的读取工作由readBuffer方法来完成,最后设置pos的位置,以便下一个buffer继续读取数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值