加入收藏 | 设为首页 | 会员中心 | 我要投稿 桂林站长网 (https://www.0773zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

教你便捷阅读 Hadoop 的源码?

发布时间:2021-07-05 20:53:01 所属栏目:大数据 来源:互联网
导读:HDFS 是大数据的最基础的设施了,几乎所有的离线存储都在 HDFS 上。 但是在大规模 HDFS 集群中,下面的问题通常会让我们无比头疼: 元数据的量级超过亿级之后,NameNode 的内存也会变得非常巨大,启动和维护都变的异常困难; 如何保障 HDFS 的高可用? NameNod

HDFS 是大数据的最基础的设施了,几乎所有的离线存储都在 HDFS 上。

但是在大规模 HDFS 集群中,下面的问题通常会让我们无比头疼:

  • 元数据的量级超过亿级之后,NameNode 的内存也会变得非常巨大,启动和维护都变的异常困难;
  • 如何保障 HDFS 的高可用?
  • NameNode 里面发生长时间的 GC 之后,导致 NameNode 进程退出,该如何解决?
  • 如何优化 DataNode 的锁粒度,让其性能更高效?

以上种种问题,都需要我们阅读源码,甚至要修改它的源码才能解决。

所以虽然阅读源码非常痛苦,但是这个坎还是得过的。

二、如何阅读 Hadoop 这样的百万行代码的开源项目

首先 hadoop 是用 java 写的,所以一些 java 基础知识必不可少,比如锁,线程,设计模式,java 虚拟机,java io,不求很深入,基础得知道。

其次,不能一行行的读代码,这样很容易迷失在无边际的代码中,逃不出来,最后很容易就放弃了。

最后,以具体场景来驱动代码阅读。比如本文就是以 NameNode 的启动过程,来驱动代码阅读的。并且把关键的流程节点和类用流程图记录下来。

三、源码走读

找到 NameNode 类

这个就表示,DataNode 每次心跳都要和 NameNode 汇报 自己的 Block 个数,每次汇报,这个值都会加 1.

如果 DataNode 汇报上来的 Block 个数小于所有可用的 Block 个数,就进入安全模式。

再来看第二个条件:


  1. datanodeThreshold != 0 && getNumLiveDataNodes() < datanodeThreshold 

这个条件表示,所有可用的 DataNode 小于配置的个数,则进入安全模式。

但是 datanodeThreshold 的默认配置值是 0,所以这个条件不启用。

第三个条件:


  1. !nameNodeHasResourcesAvailable() 

这个方法就是我们前面检查资源时,赋值出来的变量:

(编辑:桂林站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!