首页 百科知识 源代码分析(三六)

源代码分析(三六)

时间:2024-09-22 百科知识 版权反馈
【摘要】:转战进入Secondary NameNode,前面的分析我们有事也把它称为从NameNode,从NameNode在HDFS里是个小配角。NameNode上实现了接口NamenodeProtocol(如下图),就是用于NameNode和Secondary NameNode间的命令通信。NameNode和Secondary NameNode间数据的通信,使用的是HTTP协议,HTTP的容器用的是jetty,TransferFsImage是文件传输的辅助类。对比NameNode保存的信息,我们可以发现Secondary NameNode上保存多了一个previous.checkpoint。

转战进入Secondary NameNode,前面的分析我们有事也把它称为从NameNode,从NameNode在HDFS里是个小配角

跟Secondary NameNode有关系的类不是很多,如下图:


mhtml:file://I:\技术文章下载\2010-4-23整理到notebook\Hadoop汇总2010-4-22\Hadoop源码分析\Hadoop<a href=源代码分析(三六)%20-%20-%20JavaEye技术网站.mht!http://caibinbupt.javaeye.com/upload/attachment/65342/54fdafd5-7f2e-30e3-aca0-add0afff1c4a.jpg">
 

 

首先要讨论的是NameNode和Secondary NameNode间的通信。NameNode上实现了接口NamenodeProtocol(如下图),就是用于NameNode和Secondary NameNode间的命令通信。

 

NameNode和Secondary NameNode间数据的通信,使用的是HTTP协议,HTTP的容器用的是jetty,TransferFsImage是文件传输的辅助类。


mhtml:file://I:\技术文章下载\2010-4-23整理到notebook\Hadoop汇总2010-4-22\Hadoop源码分析\Hadoop源代码分析(三六)%20-%20-%20JavaEye技术网站.mht!http://caibinbupt.javaeye.com/upload/attachment/65346/067fe549-efae-3020-a462-40102d03cf8e.jpg
 

GetImageServlet的doGet方法目前支持取FSImage(getimage),取日志(getedit)和存FSImage(putimage)。例如:

http://localhost:50070/getimage?getimage

可以获取FSImage。

http://localhost:50070/getimage?getedit

可以获取日志文件。

保存FSImage需要更多的参数,它的流程很好玩,SecondaryNameNode发送一个HTTP请求到NameNode,启动NameNode上一个HTTP客户端到SecondaryNameNode上去下载FSImage,下载需要的一些信息,都放在从NameNode的HTTP请求中。

我们先来考察Secondary NameNode持久化保存的信息:

[hadoop@localhostnamesecondary]$ ls –R
.:
current  image  in_use.lock previous.checkpoint

./current:
edits  fsimage  fstime VERSION

./image:
fsimage

./previous.checkpoint:
edits  fsimage  fstime VERSION

in_use.lock的用法和前面NameNode,DataNode的是一样的。对比NameNode保存的信息,我们可以发现Secondary NameNode上保存多了一个previous.checkpoint。CheckpointStorage就是应用于Secondary NameNode的存储类,它继承自FSImage,只添加了很少的方法。

previous.checkpoint目录保存了上一个checkpoint的信息(current里的永远是最新的),临时目录用于创建新checkpoint,成功后,老的checkpoint保存在previous.checkpoint目录中。状态图如下(基类FSImage用的是黑色):


mhtml:file://I:\技术文章下载\2010-4-23整理到notebook\Hadoop汇总2010-4-22\Hadoop源码分析\Hadoop源代码分析(三六)%20-%20-%20JavaEye技术网站.mht!http://caibinbupt.javaeye.com/upload/attachment/65344/9f305133-23c6-3423-9b22-6f32f81ee06a.jpg
 

 

至于上面目录下文件的内容,和FSImage是一样的。

CheckpointStorage除了上面图中的startCheckpoint和endCheckpoint方法(上图给出了正常流程),还有:

    voidrecoverCreate(Collection<File> dataDirs,

                      Collection<File> editsDirs) throwsIOException

和FSImage.coverTransitionRead类似,用于分析现有目录,创建目录(如果不存在)并从可能的错误中恢复。

    privatevoid doMerge(CheckpointSignature sig) throws IOException

doMerge被类SecondaryNameNode的同名方法调用,我们后面再分析。


免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈