[HDFS] 启动HDFS缺少服务
启动Hadoop后使用JPS命令查看进程,发现只有NameNode和NodeManger。
原因:格式化两次namenode。导致namenode和datanode中的CID不一致。
$ hadoop namenode -format
解决方法:修改namenode和datanode的CID为同一个或者清除文件夹(先停止Hadoop所有服务)。
上述方法执行完没有结果则查看端口号是否被占用。
第一种
查看Hadoop下的配置文件core-site.xml内容:
$ vim /opt/hadoop2.6.5/etc/hadoop/core-site.xml
<property> <name>hadoop.tmp.dir</name> <value>/home/huasheng/app/hadoop-2.6.5/tmp/</value> </property>
发现临时目录在/home/huasheng/app/hadoop-2.6.5/tmp/ 下
$ cd /home/huasheng/app/hadoop-2.6.5/tmp/dfs
$ ls
data name namesecondary
#name: namenode的信息
#data: datanode的信息
#查看name下的VERSION信息
$ cat name/current/VERSION
#Fri Mar 15 10:12:21 CST 2019
namespaceID=596602248
clusterID=CID-b604bc78-8f8a-4cf6-a02b-3ac257ebef93
cTime=0
storageType=NAME_NODE
blockpoolID=BP-139131966-192.168.142.129-1552615941181
layoutVersion=-60
#修改data下的clusterID
$ vim data/current/VERSION
#Fri Mar 15 10:37:33 CST 2019
storageID=DS-a9a026d4-3833-4086-91c4-17e68c157add
clusterID=CID-b604bc78-8f8a-4cf6-a02b-3ac257ebef93
cTime=0
datanodeUuid=b3848163-9ee4-4192-bc58-c96184c3dddd
storageType=DATA_NODE
layoutVersion=-56
启动Hadoop即可。
第二种
直接删除临时目录下文件,格式化namenode节点。
$ rm -rf /hadoop-2.6.5/tmp/
$ hadoop namenode -format
启动Hadoop即可。
但是我在测试的时候使用上述方法之后仍然没有解决。
#打开日志文件
$ cd /hadoop-2.6.5/logs/
#日志信息使用 类型-用户名-服务-hostname.log 的形式存储。比如datanode节点:
hadoop-huasheng-datanode-huas.log
查看后发现如下一段:
java.net.BindException: Port in use: 0.0.0.0:50090 at org.apache.hadoop.http.HttpServer2.openListeners(HttpServer2.java:892) at org.apache.hadoop.http.HttpServer2.start(HttpServer2.java:828) at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.initialize(SecondaryNameNode.java:276) at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.<init>(SecondaryNameNode.java:192) at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.main(SecondaryNameNode.java:671) Caused by: java.net.BindException: 地址已在使用 at sun.nio.ch.Net.bind0(Native Method) at sun.nio.ch.Net.bind(Net.java:433) at sun.nio.ch.Net.bind(Net.java:425) at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) at org.mortbay.jetty.nio.SelectChannelConnector.open(SelectChannelConnector.java:216) at org.apache.hadoop.http.HttpServer2.openListeners(HttpServer2.java:887) ... 4 more
查看端口是否被占用,如果被占用则杀掉对应进程即可
$ netstat -anp | grep 50090