hadoop没有启动datanode
Exception in thread "main" org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /usr/local/hadoop-0.20.2/hadooptmp/dfs/namesecondary is in an inconsistent state: checkpoint directory does not exist or is not accessible.
at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode$CheckpointStorage.recoverCreate(SecondaryNameNode.java:522)
at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.initialize(SecondaryNameNode.java:145)
at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.<init>(SecondaryNameNode.java:115)
at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.main(SecondaryNameNode.java:469)
,就当是抛砖引玉了。
相信楼主知道,hadoop的文件系统叫做hdfs,就是hadoop分布式分布式文件系统的中文简写。这个系统是对google的gfs的开源实现。下面来回答问题。
首先是节点故障:
google在他们那篇gfs的论文中说,google在使用gfs曾说过,google在使用gfs时遇到过各种各样的问题,主要有:应用程序bug、操作系统的bug、人为失误,甚至还有硬盘、内存、连接器、网络以及电源失效。在一个大型的系统中,硬盘内存等等组件的老化,过度使用(因为数据读写非常频繁)等问题也是不容忽视的。hadoop的hdfs是需要考虑这些问题的。
然后是备份恢复的处理:
备份恢复因为我没有做过,不过我可以提供给楼主一个方法实验。
楼主可以先搭建一个只有3台datanode的小集群,设置数据备份为2。首先清空已有数据,然后在其中一台datanode上上传数据,默认时,hadoop是会在上传数据的datanode存入一个数据备份的。然后在down掉这台datanode,这样,你就少了一个数据备份,之后,你在另一台机器上读取数据,这时,你可以查看剩下的两台datanode中的dfs文件夹(也就是你存储hdfs数据的文件夹),打开其中腔空block开头的文件看,这时应该就可以看到两台机器都有备份了。(推测)
根据gfs的论文,hadoop应该在数据被再次使用时进行检查,如果发现少了一个备份,会进行数据敬圆大恢复工作。另一个时间是,机器空闲时会在后台监测数据备份情况。也就是说,数据恢复是自动,这也是hadoop的强大之处嘛。
至于namenode的恢复,没有处理过类似的问题,不过猜想和secondary namenode 有关,应该是将secondary namenode 存储的数据copy到namenode上,或是直接将secondary namenode 变成namenode 。
至于节点问题,down的节点经过恢复后,可以直接链接进入hadoop集群,而不用重新亮竖启动集群。命令是
bin/hadoop-daemon.sh start datanode