Ubuntu16.04安装hadoop2.7.2分布式集群遇到的各种问题总结
① 执行hadoop namenode -format
以后,发现namenode运行在admin_server
的127.0.1.1
上
原因: 最开始修改/etc/hosts
文件时,直接将127.0.1.1
后面的localhost
修改为了admin_server
。
解决办法: 删除127.0.1.1
的那条配置,直接在127.0.0.1
下面添加以下内容(所有主机的/etc/hosts
文件均一样):
192.168.202.34 adminserver
192.168.202.33 monserver
192.168.202.31 osdserver1
192.168.202.32 osdserver2
192.168.202.35 osdserver3
执行hadoop namenode -format
重新格式化:
② 执行start-dfs.sh
以后,报错Incorrect configuration: namenode address dfs.namenode.servicerpc-address or dfs.namenode.rpc-addres
**错误原因一:**查找资料以后,以为是没有设置HADOOP_CONF_DIR
这个环境变量。参考链接:Hadoop启动dfs时报错Incorrect configuration: namenode address dfs.namenode.servicerpc-address or dfs.namen
**解决方法:**添加环境变量:
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
后来发现再次执行start-dfs.sh
仍然报同样的错误!!于是继续查找自资料,在中可能的四种原因给出了四个原因,发现都不是自己的错误原因。后来发现是因为自己最开始规划集群集群时,所有hostname有带有下划线!!
真正的错误原因:hostname中不能带有下划线,否则识别会出问题!
解决办法: 修改/etc/hosts
和/etc/hostname
,将hostname中的下划线都去掉。
执行start-dfs.sh
后,正常初始化相关节点:
参考的链接:关于这个错误切中要害的参考资料!
③ 在slave节点上执行jps
以后,发现slave节点上没有DataNode、NodeManager进程
查看slave节点上的/hadoop-2.7.2/logs/hadoop-cephlee-datanode-monserver.log
日志:
$ cat hadoop-cephlee-datanode-monserver.log
发现错误信息如下:
java.net.BindException: Problem binding to [0.0.0.0:50010] java.net.BindException: 地址已在使用; For more details see: http://wiki.apache.org/hadoop/BindException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:792)
at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:721)
at org.apache.hadoop.ipc.Server.bind(Server.java:425)
at org.apache.hadoop.ipc.Server.bind(Server.java:397)
at org.apache.hadoop.hdfs.net.TcpPeerServer.<init>(TcpPeerServer.java:111)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initDataXceiver(DataNode.java:893)
at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:1107)
at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:428)
at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:2370)
at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:2257)
at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:2304)
at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:2481)
at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:2505)
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.apache.hadoop.ipc.Server.bind(Server.java:408)
... 10 more
2018-07-19 21:19:43,701 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 1
2018-07-19 21:19:43,705 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down DataNode at monserver/192.168.202.33
************************************************************/
使用命令查看被占用的端口情况:
$ sudo netstat -antup
**错误原因:**发现被docker-proxy占用,以前配置docker上的hadoop集群冲突
**解决办法:**删除Hadoop集群应用,使用以下命令,先停止hadoop集群,再开启hadoop集群:
# 停止hadoop集群
$ stop-all.sh
或者
$ stop-dfs.sh
$ stop-yarn.sh
# 重新启动hadoop集群
$ start-all.sh
$ start-dfs.sh
$ start-yarn.sh
再次执行jps
命令,slave节点上出现DataNode、NodeManager进程: