最近遇到了一个问题,执行start-all.sh的时候发现JPS一下namenode没有启动
    每次开机都得重新格式化一下namenode才可以
    
    其实问题就出在tmp文件,默认的tmp文件每次重新开机会被清空,与此同时namenode的格式化信息就会丢失
    
    于是我们得重新配置一个tmp文件目录
    
    首先在home目录下建立一个hadoop_tmp目录
    
    sudo mkdir ~/hadoop_tmp
    
    然后修改hadoop/conf目录里面的core-site.xml文件,加入以下节点:
    
    <property>
    
    <name>hadoop.tmp.dir</name>
    
    <value>/home/chjzh/hadoop_tmp</value>
    
    <description>A base for other temporary directories.</description>
    
    </property>
    
    注意:我的用户是chjzh所以目录是/home/chjzh/hadoop_tmp
    OK了,重新格式化Namenode
    
    hadoop namenode -format
    
    然后启动hadoop
    
    start-all.sh
    
    执行下JPS命令就可以看到NameNode了
    原文:https://blog.csdn.net/l1028386804/article/details/46353211
    
   
    解决”no datanode to stop”问题
    
    当我停止Hadoop时发现如下信息:
    
    no datanode to stop
    
    原因:每次namenode format会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,但是没有清空datanode下的数据,导致启动时失败,有两种解决方案:
    
    第一种解决方案如下:
    
    1)先删除”/usr/hadoop/tmp”
    
    rm -rf /usr/hadoop/tmp
    
    2)创建”/usr/hadoop/tmp”文件夹
    
    mkdir /usr/hadoop/tmp
    
    3)删除”/tmp”下以”hadoop”开头文件
    
    rm -rf /tmp/hadoop*
    
    4)重新格式化hadoop
    
    hadoop namenode -format
    
    5)启动hadoop
    
    start-all.sh
    
    使用第一种方案,有种不好处就是原来集群上的重要数据全没有了。假如说Hadoop集群已经运行了一段时间。
    
    建议采用第二种。
    
    第二种方案如下:
    
    1)修改每个Slave的clusterID使其与Master的clusterID一致。
    
    或者
    
    2)修改Master的clusterID使其与Slave的clusterID一致。
    
    该”namespaceID”位于”/home/zkpk/hadoopdata/dfs/name/current/VERSION”文件中,前面蓝色的可能根据实际情况变化,但后面红色一般是不变的。
    
    例如:查看”Master”下的”VERSION”文件
    本人建议采用第二种,这样方便快捷,而且还能防止误删。
    
    总结一下,其实找不到datanode的原因可能往往是因为自己搭建集群的时候格式化多次了,当然不排除机子突然抽风了,本来集群搭建第一次格式化时namenode生成一个clusterID,并且复制给子节点了,当再次不小心格式化的时候导致namenode和datanode的clusterID不一样了,所以才会出现start-all.sh的时候找不到datanode了。
   
 
