【精】HDFS源码阅读之整体框架图(非常重要)

目录

要点总结

框架详图


要点总结

  • HDFS File只支持Append写,每个Block在DN节点上其实就是Linux的一个文件,在写满一个Block Size后,会创建新文件,继续写新文件,所以Block不宜太小,会导致文件数过多。
  • Client在读写Block过程中,如果有Bad Block,Client和DN都会向NN上报,减轻NN负担。
  • Standby NN通过HTTP协议上传下载NN的元数据文件FSImage文件,优点是大文件数据比TCP实现更简单,消耗更小,同时因为RPC则无法传递大数据量,所以选HTTP。
  • Client写Block,Client与DN、DN与DN之间,会开启两个线程,两个socket,一个负责接收数据并写入下一个DN,一个负责接收DN的ack,两个线程专门服务一个写请求,保证吞吐率,主线程将数据写入dataqueue队列,开启新线程不断读取dataqueue,将数据分package进行检验(在TCP流中表现就是数据帧),往DN发送,同时将package放入到ackqueue,当收到ack后,将ackqueue的package移除
  • Client读Block,先判断Block和Client是否同一个机器,是则直接读Linux文件,否则通过TCP流读数据,DN写出数据时,会通过java的NIO transferTo方式,直接将数据从磁盘读入->内核缓存->输出,直接在内核态将数据输出,避免数据经过用户态,提高效率
  • NN保存有file和block映射信息,但是不保存Block与DN映射信息,在DN启动时,通过blockReport上报所有Block信息给NN,所以这里可见,DN是可以将整个目录拷贝迁移到其他服务器,然后重新启动DN,会扫描当前机器所有Block,再report给NN的。
  • DN会定期report所有Block给NN,也会增量report Block给NN(report信息太频繁,可能导致NN负载过高),同时也会发送心跳包将DN的负载等信息report 给NN,然后从NN带回指令执行,NN与DN是主从关系,NN不会主动联系DN
  • DN检查Block完整性,主要包括Block Scanner & VolumeScanner扫描block内容是否损坏(限流扫描非常慢),DirectoryScanner扫描内存的目录与磁盘目录是否一致,DiskChecker扫描磁盘是否正常

框架详图(点击图片放大查看)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值