在一次hadoop的重启过程中,重启失效,只能杀掉hadoop的namenode进程。
查看name/current
出现了一个edits.new文件。说明在重启hadoop的时候没有将edits的信息合并到fsimage中,造成namenode出错。
将/tmp/dfs/namesecondary/current
中的edits,fsimage,fstime,VERSION拷贝到name/current中。
这个实际是将secondarynamenode定时镜像的文件覆盖掉出错的name节点的数据。
重启hadoop。正常启动。
这种方式,需要保证secondarynamenode是正确运行的,配置正确,每隔1个小时备份一次。这样能尽量保证数据的恢复。
再重启的时候,出现如下问题:
2012-05-18 15:17:35,313 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: java.lang.NullPointerException
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.unprotectedSetTimes(FSDirectory.java:1356)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.unprotectedSetTimes(FSDirectory.java:1345)
at org.apache.hadoop.hdfs.server.namenode.FSEditLog.loadFSEdits(FSEditLog.java:774)
at org.apache.hadoop.hdfs.server.namenode.FSImage.loadFSEdits(FSImage.java:1009)
at org.apache.hadoop.hdfs.server.namenode.FSImage.loadFSImage(FSImage.java:827)
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:365)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:97)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:379)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:353)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:254)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:434)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1153)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1162)
查看name/current
drwxr-xr-x 2 hadoop hadoop 4096 2012-05-18 16:30 .
drwxr-xr-x 8 hadoop hadoop 4096 2012-05-23 09:45 ..
-rw-r--r-- 1 hadoop hadoop 864517 2012-05-18 16:30 edits
-rw-r--r-- 1 hadoop hadoop 20914385 2012-05-18 16:30 edits.new
-rw-r--r-- 1 hadoop hadoop 13644512 2012-05-18 16:30 fsimage
-rw-r--r-- 1 hadoop hadoop 8 2012-05-18 16:30 fstime
-rw-r--r-- 1 hadoop hadoop 100 2012-05-18 16:30 VERSION
出现了一个edits.new文件。说明在重启hadoop的时候没有将edits的信息合并到fsimage中,造成namenode出错。
将/tmp/dfs/namesecondary/current
中的edits,fsimage,fstime,VERSION拷贝到name/current中。
这个实际是将secondarynamenode定时镜像的文件覆盖掉出错的name节点的数据。
重启hadoop。正常启动。
这种方式,需要保证secondarynamenode是正确运行的,配置正确,每隔1个小时备份一次。这样能尽量保证数据的恢复。