今天用hadoop的hdfs和Hbase时不知道怎么回事总是发生了崩溃,我最终试了重新格式化namenode节点的方式进行解决,但是重新格式化之后发生了一系列问题,不是namenode启动不了就是datanote启动不了。后来上网查询才知道格式化namenote需要注意一些事项:

1.重新格式化namenote相当于格式化元数据,会破坏整个集群数据,格式化前需考虑数据备份或者转移问题。

2.先删除主节点(namenote)下的临时存储目录tmp,namenode存储永久性元数据目录dfs/name、Hadoop系统日志文件目录log 中的内容 (注意是删除log时是删除目录下的内容不是目录); hadoop的临时存储目录tmp(这个目录在配置文件中core-site.xml配置文件中的hadoop.tmp.dir属性值,默认值是/tmp/hadoop-${user.name}),如果没有配置hadoop.tmp.dir属性,那么hadoop格式化时将会在/tmp目录下创建一个目录,例如在cloud用户下安装配置hadoop,那么Hadoop的临时存储目录就位于/tmp/hadoop-cloud目录下 )。

Hadoop的namenode元数据目录(即hdfs-site.xml配置文件中的dfs.namenode.name.dir属性,默认值是${hadoop.tmp.dir}/dfs/name),同样如果没有配置该属性,那么hadoop在格式化时将自行创建。必须注意的是在格式化前必须清楚所有子节点(即DataNode节点)dfs/name下的内容,否则在启动hadoop时子节点的守护进程会启动失败。这是由于,每一次format主节点namenode,dfs/name/current目录下的VERSION文件会产生新的clusterID、namespaceID。但是如果子节点的dfs/name/current仍存在,hadoop格式化时就不会重建该目录,因此形成子节点的clusterID、namespaceID与主节点(即namenode节点)的clusterID、namespaceID不一致。最终导致hadoop启动失败。

3.删除所有数据节点(即datanode节点) ,Hadoop的临时存储目录tmp、datanode存储永久性元数据目录dfs/name、Hadoop系统日志文件目录log中的内容; 

 

因为我没有配dfs/name的路径,经过查看,它就在那个临时目录tmp的下面,整个删除就行了。然后进行hadoop namenode -format

执行完格式化之后,会影响HBase的ZooKeeper,如果你没有自定义使用外部ZooKeeper,那么在/home/{你的用户名}/zookeeper目录下存在一个叫Version-2的文件夹及一个叫myid的文件,把Version-2文件夹删除(所有节点都要做这个操作)