问题描述
在做 HDFS编程实践操作 的时候,遇到一个报错信息。
在IDEA中执行hadoop相关的的程序时,出现以下的报错信息,随即开始排错之旅,一波三折。
Exception in thread "main" java.net.ConnectException: Call From hadoop01/192.168.30.134 to localhost:9000 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:930)
at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:845)
at org.apache.hadoop.ipc.Client.getRpcResponse(Client.java:1571)
at org.apache.hadoop.ipc.Client.call(Client.java:1513)
at org.apache.hadoop.ipc.Client.call(Client.java:1410)
at org.apache.hadoop.ipc.ProtobufRpcEngine2$Invoker.invoke(ProtobufRpcEngine2.java:258)
at org.apache.hadoop.ipc.ProtobufRpcEngine2$Invoker.invoke(ProtobufRpcEngine2.java:139)
at com.sun.proxy.$Proxy12.getListing(Unknown Source)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getListing(ClientNamenodeProtocolTranslatorPB.java:689)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:433)
at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invokeMethod(RetryInvocationHandler.java:166)
at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invoke(RetryInvocationHandler.java:158)
at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invokeOnce(RetryInvocationHandler.java:96)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:362)
at com.sun.proxy.$Proxy13.getListing(Unknown Source)
at org.apache.hadoop.hdfs.DFSClient.listPaths(DFSClient.java:1702)
at org.apache.hadoop.hdfs.DFSClient.listPaths(DFSClient.java:1686)
at org.apache.hadoop.hdfs.DistributedFileSystem.listStatusInternal(DistributedFileSystem.java:1113)
at org.apache.hadoop.hdfs.DistributedFileSystem.access$600(DistributedFileSystem.java:149)
at org.apache.hadoop.hdfs.DistributedFileSystem$24.doCall(DistributedFileSystem.java:1188)
at org.apache.hadoop.hdfs.DistributedFileSystem$24.doCall(DistributedFileSystem.java:1185)
at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
at org.apache.hadoop.hdfs.DistributedFileSystem.listStatus(DistributedFileSystem.java:1195)
at org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:2078)
at org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:2122)
at MergeFile.doMerge(MergeFile.java:39)
at MergeFile.main(MergeFile.java:65)
Caused by: java.net.ConnectException: Connection refused
at java.base/sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:777)
at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:205)
at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:600)
at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:652)
at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:773)
at org.apache.hadoop.ipc.Client$Connection.access$3800(Client.java:347)
at org.apache.hadoop.ipc.Client.getConnection(Client.java:1632)
at org.apache.hadoop.ipc.Client.call(Client.java:1457)
namenode格式化正常,集群启动一切正常的情况下,在使用IDEA执行HDFS时间却出现上面的错误。
集群启动的方法可以参考 Hadoop(02) Hadoop-3.3.6 集群的配置教程 中第五小节中的集群启动部分。
最后可以使用jps查看服务是否都启动成功了。
解决思路
方法一
hadoop jar /usr/local/hadoop-3.3.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar pi 5 10
说明:命令运行了一个名为"pi"的示例作业,用于计算Pi的近似值。作业参数为5和10,表示将使用5个Mapper和每个Mapper处理10个样本。
如果这一步有问题,可以参考资料: hadoop运行程序时报错java.net.ConnectException: java.net.ConnectException: 拒绝连接;_hadoop connectexception: call from n01/192.168.3.1-CSDN博客
来解决。
方法二
执行代码:
hadoop fs -ls hdfs://localhost:9000
发现和IDEA控制台中同样地报错信息。
查看9000端口的监听地址:
netstat -anp | grep 9000
发现端口监听IP为192.168.30.134,是服务器(虚拟主机hadoop01)的IP,再查看下core-site.xml
cd /usr/local/hadoop-3.3.6/etc/hadoop/
cat core-site.xml
配置文件里面HDFS主机IP是hadoop01而不是127.0.0.1(localhost),所以当我们访问127.0.0.1:9000的时候会被拒绝,因为我们在做映射文件的时候hadoop01 对应的是192.168.30.134,而 localhost 对应的是 127.0.0.1,所以当我们访问localhost:9000时,会被拒绝。
解决方法
将代码中的 localhost 改为 hadoop01
或者 将配置文件core-site.xml 中的fs.defaultFS参数改成hdfs://127.0.0.1:9000,重启hdfs即可。
注:修改成127.0.0.1以后,只允许本机访问,如果需要全网访问,需要改成hdfs://0.0.0.0:9000
参考资料
hadoop运行程序时报错java.net.ConnectException: java.net.ConnectException: 拒绝连接;_hadoop connectexception: call from n01/192.168.3.1-CSDN博客文章来源:https://www.toymoban.com/news/detail-758124.html
HDFS9000端口拒绝连接 - 简书 (jianshu.com)文章来源地址https://www.toymoban.com/news/detail-758124.html
到了这里,关于Hadoop(4-2) Exception inthread “main“ java.net.ConnectException.....net.ConnectException: Connection的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!