使用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文件,找到或添加以下属性:

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马龙强_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值