更新时间:2022-12-14 GMT+08:00

NameNode启动慢

问题

删除大量文件之后立刻重启NameNode(例如删除100万个文件),NameNode启动慢。

回答

由于在删除了大量文件之后,DataNode需要时间去删除对应的Block。当立刻重启NameNode时,NameNode会去检查所有DataNode上报的Block信息,发现已删除的Block时,会输出对应的INFO日志信息,如下所示:

2015-06-10 19:25:50,215 | INFO  | IPC Server handler 36 on 25000 | BLOCK* processReport: 
blk_1075861877_2121067 on node 10.91.8.218:9866 size 10249 does not belong to any file | 
org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.processReport(BlockManager.java:1854)

每一个被删除的Block会产生一条日志信息,一个文件可能会存在一个或多个Block。当删除的文件数过多时,NameNode会花大量的时间打印日志,然后导致NameNode启动慢。

当出现这种现象时,您可以通过如下方式提升NameNode的启动速度。

  1. 删除大量文件时,不要立刻重启NameNode,待DataNode删除了对应的Block后重启NameNode,即不会存在这种情况。

    您可以通过hdfs dfsadmin -report命令来查看磁盘空间,检查文件是否删除完毕。

  2. 如已大量出现以上日志,您可以将NameNode的日志级别修改为ERROR,NameNode不会再打印此日志信息。

    等待NameNode启动完毕后,再将此日志级别修改为INFO。修改日志级别后无需重启服务。