why previous.checkpoint folder not exist on hadoop snn node
更新日期:
分析为何在hadoop snn(secondary namenode)节点上,没生成previous.checkpoint文件夹
偶然发现,在《权威指南》第二版中文版,第10章p296-p297,给出的目录结构,并没有在我本机伪分布式出现。
少了一个previous.checkpoint目录,为何?随着深挖,发现了一些有意思的事情(我用的是hadoop-1.2.1)
开启debug,进行debug本机
(关于debug的开启,可以参考 这里)
1.由于是在snn节点上没有生成previous.checkpoint目录,因此,我们需要debug这个节点。
2.进入snn的类,checkpoint是一个周期性的事情,因此必须由定时器执行线程的方式来处理,因此逻辑都在守护线程里
3.进入守护线程,发现startCheckpoint方法,分析它
4.一起看一下startCheckpoint做了什么事情
5.分析完startCheckpoint后,跳出它,逐个分析其他函数,发现doMerge又是一个核心逻辑方法,分析它
6.刚才在doMerge方法里,已经看到snn生成了previous.checkpoint目录,现在进入守护线程的最后一段逻辑 endCheckpoint方法
结论
至此我们已经可以得出结论,是由于调用了2次moveLastCheckpoint (doMerge一次,endCheckpoint一次),导致第一次生成的previous.checkpoint被第二次删除了,
由于代码执行的很快,让我们感觉snn上的previous.checkpoint目录从未存在过一样,由于我是debug,因此可以看到变化。
进而深挖
这个是hadoop的一个bug,从0.20到至今一直有这个问题,以下是BUG说明。