最近抽空搭建了Hadoop完全分布式环境,期间遇到了很多问题,大部分问题还是可以在网上搜到的,这里说下自己遇到的两个没有找到结果的问题吧。
1、启动时报:没有那个文件或目录
原因:三台机器的用户名不一致导致的
2、启动Hadoop服务之后,slave01的DataNode未启动,报错信息如下:
java.net.BindException: Port in use: slave02:50075 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.datanode.DataNode.startInfoServer(DataNode.java:691) at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:1085) at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:417) at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:2328) at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:2215) at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:2262) at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:2438) at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:2462) Caused by: java.net.BindException: 无法指定被请求的地址 at sun.nio.ch.Net.bind0(Native Method) at sun.nio.ch.Net.bind(Net.java:444) at sun.nio.ch.Net.bind(Net.java:436) at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:214) 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) ... 9 more
灵感来自这篇文章:http://jeoygin.org/2012/03/hdfs-source-analysis-datanode-startup-service.html
原因还未理解(如果有人懂的话,还望指导),具体做法为:将slave01机器上hdfs-site.xml文件中的slave02的相关信息注释掉,只保留自己机器的相关配置即可。
参考资料:
1、编译hadoop源码
http://www.cnblogs.com/yjmyzz/p/compile-hadoop-2_6_0-source-code-in-centos_x64.html
2、完全分布式安装
http://www.cnblogs.com/yjmyzz/p/hadoop-2_6_0-full-distribution-deploy-tutorial.html
(在此非常感谢博主的这两篇博客,)