我的namedata进程突然之间没有的原因:刚开始我以为是没有关闭集群就重启,后面发现是因为 我/tmp目录下的hadoop-hadoop文件移走后没有配置目 标文件位置
还有其他原因也会导致比如:1.直接关闭虚拟机,也没有停止hadoop 集群
2.格式化namenode之前,没有删除data里面的数据和日志,导致 namenode和datanode的cluserID 不一致
总结:/tmp目录下的hadoop-hadoop文件一定要移走,且配置目录
这里我会把我碰到的问题都罗列出来
一.首先我jps后没有了namenode进程(解决方法)
看网上的有三种情况1.就是上面讲的那几种;2.就是namenode的端口可能被占用了;3.namenode的在core-site.xml配置的hadoop.tmp.dir文件位置不对
情况二:
最好验证:查看占用端口的进程,然后kill
[hadoop@hadoop001 ~]$ lsof -i:9000(端口号)
或者[hadoop@hadoop001 ~]$ sudo netstat -anp | grep 9000(这个需要先给hadoop配置sudo权限)
如果有就kill,没有就换情况一
情况一:重新格式化
先停止Hadoop的集群
[hadoop@hadoop001 ~]$ sbin/stop-dfs.sh
然后删除logs日志和data的数据,下面是我删除的过程
[hadoop@hadoop001 ~]$ cd app/hadoop
找到logs文件夹然后进入删除里面的log日志,可以全部删除
[hadoop@hadoop001 logs]$ rm -rf *
然后再寻找到tmp目录(这是我自己创建的tmp目录,存放name和data文件的,如果你没有移动过,默认是在/tmp目录下的hadoop-hadoop里面)
然后找到dfs文件夹
删除data数据(我是连着name和namesecondary一起删除了,不影响)
[hadoop@hadoop001 dfs]$ rm -rf data name
若是在tmp目录里面还有这个nm-local-dir文件夹也一并删除
[hadoop@hadoop001 tmp]$ rm -rf nu-local-dir
然后进行namenode的格式化
[hadoop@hadoop001 hadoop]$bin/hdfs namenode -format
最后就可以重启了hadoop集群,jps就有了
[hadoop@hadoop001 ~]$ sbin/start-dfs.sh
[hadoop@hadoop001 ~]$ jps
这边我重启完建议还是把/tmp的hadoop-hadoop文件夹里面的内容重新移动到你自己创建的tmp文件中,防止被删除。(如果你移动了建议看一下三)
情况三:
刚开始你的dfs文件夹是默认安装在/tmp目录的hadoop-hadoop下的,如果你没有移动过就不用在core-site.xml中配置位置,但是一般为了防止文件被自动删除所以都会移动,就像我上面建议的一样会把文件夹移走,那么就需要在core-site.xml中配置一下了
在core-site.xml新增
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
红色字体就是我所移动之后的文件夹位置了,一般情况下配置完,你重启也会出现namenode进程打不开,原因是:我们mv完hadoop-hadoop文件后,配置文件还是读取老地方 /tmp ,实际存储已经在/home/ruoze/tmp了,所以就需要重新格式化了,回到情况一的解决方法。
总结:对于情况一三,也就是说每次namenode格式化结束以后,你的dfs文件就会根据你配置的目录存放,当你修改配置目录时,就需要重新格式化,去更新读取dfs的位置
二.在过程中我有过jps后namenode进程有,但是datanode没有
1.namenode的clusterID和datanode的clusterID不一致(原因就是namenode格式化导致的);2.data目录下的文件夹没有内容
情况一:找到namenode的clusterID 然后复制到datanode的clusterID,再重启hadoop集群就好了
两者的clusterID就是在上面说的tmp目录下的dfs文件夹中的data和name文件夹中,里面的current文件夹中的VERSION文本中。
情况二:重新格式化