Hadoop的datanode,namenode无法启动

   1、读写权限出错

    首先jps检查过后只有datanode没有启动,然后去Hadoop安装目录下的logs文件中找最近一次datanode的日志

    (网上有很多种故障,建议最好自己先看看日志自己的故障是不是和别人是一样的,然后在进行排错):

 org.apache.hadoop.hdfs.server.datanode.DataNode: Invalid directory in dfs.data.dir:

Incorrect permission for /home/hadoop/HadoopPseudoDistributTest/tmpdir/hdfs/data, expected: rwxr-xr-x, while actual: rwxrwxrwx

我的是读写权限出错,用下面的命令修改

chmod 755 /home/hadoop/HadoopPseudoDistributTest/tmpdir/hdfs/data

附上文件修改权限讲解:

Linux系统下如何查看及修改文件读写权限 - huiy - 博客园
http://www.cnblogs.com/CgenJ/archive/2011/07/28/2119454.html

2、datanode的ID出现问题

    之前自己IP(ifconfig查看)出错时导致namenode启动不起来,自己没发现,看到网上说要

  格式化namenode: bin/hadoop namenode -format

 在调用几次后,发现datanode就启动不起来了,(datanode在迅速开始后关闭有时也是这个原因)后来从网上查到原因如下:

 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException:

 Incompatible namespaceIDs in /home/gqy/hadoop/data: namenode namespaceID = 1234444; datanode namespaceID = 23453466

       在执行文件系统格式化时,会在namenode数据文件夹(即配置文件中dfs.name.dir在本地系统的路径)中保存一个current/VERSION文件,

  记录namespaceID,标识了所格式化的 namenode的版本。如果频繁地格式化namenode,那么datanode中保存(即配置文件中dfs.data.dir在本地系统的路径)

   的current/VERSION文件只是你第一次格式化时保存的namenode的ID,因此就会造成datanode与namenode之间的id不一致。

      解决办法: 把配置文件中dfs.data.dir在本地系统的路径下的current/VERSION中的namespaceID(即datanode namespaceID = 23453466)改为与

      namenode namespaceID = 1234444(从日志里找)一样。

3、namenode进程端口号被别的程序占用了

   也有可能是我有时没有直接stop-all.sh,直接关的:    

         命令:netstat -tunlp | grep java       查看有哪些端口被占(过滤java进程占用)

     然后用kill 进程号,重新:bin/start-all.sh,jps查看正常运行

  

 

原文地址:https://www.cnblogs.com/daocaorenblog/p/5055307.html