文章作者:luxianghao
文章来源:http://www.cnblogs.com/luxianghao/p/6564032.html 转载请注明,谢谢合作。
免责声明:文章内容仅代表个人观点,如有不当,欢迎指正。
---
在启动过程中,Namenode在能处理client的请求之前必须完成以下几步:
1 从fsimage文件中读取系统metadata
2 读取edit logs并把记录在其中的操作合并到系统metadata中去
3 生成一个新的checkpoint(新的fsimage必须和旧fsimage加上edit log上操作保持一致)
4 保持safe mode直到Datanodes上报足够数量的block信息
在一些情况下 上面的这些动作会消耗很长时间, eg:
1 edit logs很大,这样读取记录到这里面的操作,合并到system metadata会花费很长时间,当secondary nn长时间不工作的时候,这种情况就会发生,
2 老化的磁盘会拖慢任何受限于io的操作: 读取fsimage,读取 edit logs,生成一个新的checkpoint(包含上面两个动作)
3 当生成一个新的checkpoint的时候,NN会写所有的被配置存储fsimage的位置,这个动作是并行的,但是NN会阻塞直到所有的写操作完成
这就意味着一块慢盘会拖慢整个启动过程
通常管理员在遇到问题的时候会第一时间去看web UI,但是NN在生成一个新的checkpoint之后才会启动 HTTP server,当重启一个NN而且启动过程慢的时候,
在web UI可用之前通常要花费好几分钟,甚至一个小时的时间,也有可能在启动过程中,NN hung住了,但是有经验的工程师,会通过检查thread dumps
来判断NN是否在正常启动
针对上面的这个说的这种不能及时看web UI的情况,HDP 2.0加了一个新的feature来解决这个问题,具体可参考 https://issues.apache.org/jira/browse/HDFS-4249
参考文档:
https://zh.hortonworks.com/blog/understanding-namenode-startup-operations-in-hdfs/