最近在部署hadoop-cloudera-beta2,遇到一个很头疼的问题;java
在从NN执行hdfs namenode –bootstrapStandby的时候老是执行失败,异常以下:node
org.apache.hadoop.hdfs.server.common.Storage: Lock on /u0_pool/hadoop-hadoop/dfs/name/in_use.lock acquired by nodename 4654@warehouse1 2013-08-13 06:35:35,448 INFO org.apache.hadoop.hdfs.server.common.Storage: Locking is disabled 2013-08-13 06:35:35,487 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Stopping NameNode metrics system... 2013-08-13 06:35:35,488 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: NameNode metrics system stopped. 2013-08-13 06:35:35,488 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: NameNode metrics system shutdown complete. 2013-08-13 06:35:35,490 FATAL org.apache.hadoop.hdfs.server.namenode.NameNode: Exception in namenode join org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /u1_pool/namenode is in an inconsistent state: namespaceID is incompatible with others. at org.apache.hadoop.hdfs.server.common.Storage.setNamespaceID(Storage.java:1090) at org.apache.hadoop.hdfs.server.common.Storage.setFieldsFromProperties(Storage.java:888)
格式化不成功,至于为何没成功,多是权限问题或者是有其余进程在使用,apache
解决方案是将主NN的dir.name.下的current拷贝到从NN的相同目录文件夹下,再次运行上述命令。bootstrap
由此能够看出其实配置HA主从NN持有相同的元数据,客户端经过访问nameservice域名空间,经过域名空间寻找处于Active状态的的NN,能够认为其实就是一个NN,那么若是才能保证两个NN持有相同的元数据呢,这就用到了QJM了,见博客http://my.oschina.net/u/1169079/blog/227208。运用到的思想相似HDFS,——分而治之。oop
打个比喻:两个门卫,有车辆经过时,他们会把车辆信息记录在一个共同的本子上,若是第一个门卫有事请假,ok第二个门卫就能够经过这个本子得到之前车辆过往信息。这个本子就是两个主从NN共享的。
ui