本文仅仅是个人读书笔记,不一定具参考价值
对于高可用性的Hadoop集群而言,应该尽量提高集群的可服务时间。
但是由于某些不可避免的原因,集群有时候需要进行重启,因此重启的时间成为关键问题。
而其中namenode的重启则是最为耗时的一个环节,namenode需要处理所有datanode的block report,
一旦节点数目变多,这个处理的过程会变得很慢。所以可以在这个部分加以改进。
近日在jira上看到一个issue
https://issues.apache.org/jira/browse/HDFS-1295
这个issue正是用于提高namenode的重启速度的。
安装原文的说法,加上这个patch之后,处理block report的效率提升300%
基本原理:
在原来的namenode的接受heart beat中处理block report时,会对report的block与在namenode中的block map进行一次'diff'的操作,但实际上当namenode重启时,每个report的block必然是不存在与block map中的,因此可以加上一次node.numBlocks()==0的判断,将启动后收到的第一次block report直接加入block map中;
而在addStoredBlock中,又加入计算liveNode的轻量化的方法,进一步提高启动的速度。
后记:这是一个不触动框架的方法,原理也较为简单,值得一试。