使用JAVA-api读取HDFS下文件内容,出现报错信息

Exception in thread "main" java.net.ConnectException: Call From qiangzi-virtual-machine/127.0.1.1 to 192.168.159.128: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:78)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
	at org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:827)
	at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:757)
	at org.apache.hadoop.ipc.Client.getRpcResponse(Client.java:1553)
	at org.apache.hadoop.ipc.Client.call(Client.java:1495)
	at org.apache.hadoop.ipc.Client.call(Client.java:1394)
	at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:232)
	at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:118)
	at jdk.proxy2/jdk.proxy2.$Proxy13.getBlockLocations(Unknown Source)
	at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getBlockLocations(ClientNamenodeProtocolTranslatorPB.java:263)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
	at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:422)
	at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invokeMethod

根据你提供的错误堆栈信息,问题出在尝试连接Hadoop集群时,具体来说是连接到NameNode(Hadoop分布式文件系统HDFS的主服务器)时出现了连接被拒绝的错误。

这可能是由以下几个原因导致的:

  1. NameNode没有运行:请检查NameNode是否正在运行。如果没有,请启动它。
  2. 防火墙/网络问题:请检查你的网络设置,确保你的程序可以访问到Hadoop集群。你可能需要在防火墙上打开一些端口,或者修改你的网络配置。
  3. 错误的主机名/IP或端口:请检查你在代码中使用的Hadoop集群的主机名、IP地址和端口是否正确。

一般来说,你可以通过以下命令来启动Hadoop的NameNode:

hadoop-daemon.sh start namenode

如果你确定NameNode已经在运行,那么你可能需要查看NameNode的日志以获取更多的信息。这通常可以在Hadoop安装目录下的logs文件夹中找到。

另外,你也可以尝试使用telnet命令来测试你的程序是否可以连接到NameNode。例如:

telnet 192.168.159.128 9000

如果这个命令无法连接,那么你可能需要查看你的网络设置。如果这个命令可以连接,那么问题可能出在你的代码上,你可能需要查看你的Hadoop配置是否正确。

经过错误排查发现Hadoop配置文件有问题:

  1. 打开core-site.xml文件,找到或添加以下属性:

fs.defaultFS
hdfs://localhost:9000

这里的valuehdfs://localhost:9000表示NameNode的默认地址和端口。你可以localhost替换为NameNode的实际IP地址,将9000替换为实际的端口号。

你可能感兴趣的:(java,hdfs,开发语言)