Hadoop源码学习笔记之NameNode启动流程分析一:源码环境搭建和项目模块及NameNode结构简单介绍

最近在跟着一个大佬学习Hadoop底层源码及架构等知识点,觉得有必要记录下来这个学习过程,以便加深自己的对于学习内容的记忆和理解。 本篇主要内容分为三部分:源码阅读环境搭建、源码项目结构概览及hdfs源码包结构简介、NameNode介绍。


本篇主要内容分为三部分:源码阅读环境搭建、源码项目结构概览及hdfs源码包结构简介、NameNode介绍。

)

第一步,源码阅读环境搭建

把Hadoop源码包导入到开发工具,eclipse或者idea都行。这里我的环境是mac os,使用的工具是idea,Hadoop版本为2.6.5。
首先,解压缩Hadoop源码包,可以将解压之后的源码包移动到idea工作空间。
然后打开idea,选择import project,指定工作空间里的源码包路径,选择maven,然后点击下一步。如图:在这里插入图片描述
勾选下图内红框中选项,然后点击下一步:
在这里插入图片描述
继续勾选下图红框中选项,然后下一步,如图:
在这里插入图片描述
继续下一步,
在这里插入图片描述
继续下一步,
在这里插入图片描述
点击完成,等待maven下载依赖,然后就导入成功了。
需要注意的是导入的时候maven需要下载很多依赖,所以这个过程可能会稍微长一些,耐心等候即可。
在这里插入图片描述
项目结构如下图:
在这里插入图片描述
参考链接:https://blog.csdn.net/twj0823/article/details/84560878

第二步,项目结构概览及hdfs项目包简介

Hadoop是一个庞大的项目,源码包导入idea之后,可以发现里面又按照功能分为很多不同的小项目,比较耳熟能详的有hdfs、mapreduce、yarn等,还有别的一些功能性的组件以及新增的特性功能。点开Packages视图,包结构如下:
在这里插入图片描述
按照顺序,先从hdfs模块的NameNode进行分析。点开hadoop-hdfs之后,发现也是按照功能进行分包的结构:
在这里插入图片描述
通过观察各个包的名字以及按功能分包的原则,联系到namenode属于服务器上的一个服务进程,所以NameNode是在server包下。server包除了有namenode,还有datanode、blockmanagement、common、protocol等包。先把目标锁定在namenode,里面大致有ha高可用、快照处理、启动进程、网络资源等模块,如图:
在这里插入图片描述

第三步,NameNode类简单介绍

NameNode类在下边一堆的类文件中间的位置,至此,目标终于找到,开始切入正题了。阅读源码是一个非常好的学习方法,不仅可以学习到底层的技术实现机制,还可以通过查看核心代码梳理整个调用流程。
首先,要学会看注释,除了通过梳理核心代码流程可以得知整个代码结构之外,通过注释可以更清晰的知道代码的意图。比如看一段繁杂的代码绕来绕去、晕头转向,而注释就是专门给人看的东西,帮助我们在看代码的时候有一个大致的推测方向。
所以,NameNode的这段注释已经很明白的说明了NameNode的功能和构成:

/**********************************************************
 * NameNode serves as both directory namespace manager and
 * "inode table" for the Hadoop DFS.  There is a single NameNode
 * running in any DFS deployment.  (Well, except when there
 * is a second backup/failover NameNode, or when using federated NameNodes.)
 *
 * The NameNode controls two critical tables:
 *   1)  filename->blocksequence (namespace)
 *   2)  block->machinelist ("inodes")
 *
 * The first table is stored on disk and is very precious.
 * The second table is rebuilt every time the NameNode comes up.
 *
 * 'NameNode' refers to both this class as well as the 'NameNode server'.
 * The 'FSNamesystem' class actually performs most of the filesystem
 * management.  The majority of the 'NameNode' class itself is concerned
 * with exposing the IPC interface and the HTTP server to the outside world,
 * plus some configuration management.
 **********************************************************/

上面两段话 主要是说,NameNode管理两类数据:
 1.filename -> blocksequence (namespace) 
 文件到block的映射,上传的文件被切分为多个block(128m),这份 映射数据就是namespace,存储在磁盘上。
2.block -> machinelist (inodes)
 block到datanode的映射,每个block都会分配给一个datanode,每个block还有3个副本,也就是每个block对应多个datanode,这个映射数据就是inodes。在NameNode每次启动的时候,由datanode汇报过来的。
最下面一段话的字面意思是,NameNode主要由FSNamesystem、NameNode本身、NameNodeServer三部分构成。其中,FSNamesystem是用来执行文件系统管理的,NameNode被用来处理外部的远程调用,包括HTTP服务以及一些配置管理。
这段话想表达什么意思呢?
FSNamesystem执行文件系统管理,这个好理解,就是负责管理元数据。
NameNode处理外部远程调用以及Http服务怎么理解?其实就是说,NameNode主要干了两件事情:
1.处理一些配置属性,就是core-site.xml、hdfs-site.xml等文件里的配置;
2.启动NameNodeServer(分为NameNodeHttpServer和NameNodeRpcServer),对外监听某个端口,处理接收到的http/rpc请求。比如请求这两个server进行创建目录、上传/下载文件等一些操作。
以上就是NameNode的功能和组成的大概介绍。

然后,结合Linux上运行jar文件的经验,查看该jar的进程,发现进程名字其实就是jar中被指定执行的Java类文件名。Hadoop集群的主节点NameNode进程也是如此,由此想进一步知道NameNode的启动流程,可以通过NameNode类的main()入口进去查看。

下一篇继续进行源码深入剖析。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值