Hadoop源码分析-HDFS写数据之申请block

4. 申请block

下面我们应该再去从dataQueue中读取packet了。而从dataQueue读取packetDatastream线程,所以我们直接看它的run方法

  1. Datastream.run(),代码比较多,分开看看。
    1.1 这里看while的判断条件,如果dataQueue的size=0,那么就等待

    image

    1.2 1:错误判断,pass;2:空判断pass;3:在这里获取了第一个packet;
    image

    1.3 这里可注释,就是从namenode上获取block。其实还有管道。nextBlockOutputStream()这里是获取block和管道。
    image

  2. Datastream.nextBlockOutputStream(),这里有个方法名字很怪locateFollowingBlock(),但是他就是申请block的方法。

    image

  3. Datastream.locateFollowingBlock(),看到了熟悉的RPC调用。那么接下来该去NanmeNodeRpcServer.addBlock()了。

    image

  4. NanmeNodeRpcServer.addBlock(),又是调用了 FSNamesystem 的一个方法。那么我们跟进FSNamesystem.getAdditionalBlock()吧。

    image

  5. FSNamesystem.getAdditionalBlock(),这的代码比较多,还好有注释。
    5.1 看注释,这里就是为新的block选择目标host.

    image

    5.2 1:创建个新的block;2:然后把创建的这个block信息添加到fsimage中并持久化(元数据管理的内容);3:最后把block和5.1中获得的主机地址一起封装到LocatedBlock对象里.然后返回LocatedBlock
    image

这些就是申请一个block了。画个图简单总结下:


image
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容