记一次hadoop Connection refused: no further information排错

前言

music:

border="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=139774&auto=1&height=66">

这两天在研究hadoop的hdfs,用本地java api远程调用hdfs时出现了连接被拒绝的问题,具体异常如下:

Caused by: java.net.ConnectException: Connection refused: no further information
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
    at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
    at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:531)
    at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:687)
    at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:790)
    at org.apache.hadoop.ipc.Client$Connection.access$3500(Client.java:411)
    at org.apache.hadoop.ipc.Client.getConnection(Client.java:1554)
    at org.apache.hadoop.ipc.Client.call(Client.java:1385)
    ... 48 more

异常如下图:
这里写图片描述
记录一下解决方案,希望可以帮到和我遇到相同问题的人。

客户端代码调用

package com.sy.hadoop;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.net.URI;

/**
 * @author suyu
 * @version 1.0.0
 * @ClassName HadoopApp
 * @Description Java Api操作Hadoop的 HDFS 文件
 * @Date 2018/7/28 16:15
 */
public class HadoopApp {

    FileSystem fileSystem = null;
    Configuration configuration = null;

    /**
     * HDFS的路径,core-site.xml中配置的端口号
     */
    public static final String HDFS_PATH = "hdfs://192.168.1.102:8082";
    /**
     * 解决无权限访问,设置远程hadoop的linux用户名称
     */
    public static final String USER = "weblogic";

    /**
     * 单元测试之前的准备工作,准备环境,加载配置
     *
     * @throws Exception
     */
    @Before
    public void setUp() throws Exception {
        System.out.println("HDFSApp is setUp.....");
        configuration = new Configuration();
        fileSystem = FileSystem.get(new URI(HDFS_PATH), configuration, USER);

    }

    /**
     * 创建目录
     *
     * @throws Exception
     */
    @Test
    public void mkDir() throws Exception {
        fileSystem.mkdirs(new Path("/hdfsapi/test"));
    }

    /**
     * 单元测试之后的工作,清理环境,释放资源等等
     *
     * @throws Exception
     */
    @After
    public void tearDown() throws Exception {
        configuration = null;
        fileSystem = null;
        System.out.println("HDFSApp is tearDown....");
    }
}

在调用单元测试的时候,想模拟创建一下目录,结果发生异常!

解决方案

下面的排错步骤,是建立在hadoop的服务端防火墙关闭的情况下(这点注意一下!)

第一步

1.查看你的hadoop Api提供的地址 + 端口!
如何查看正确的地址呢?
打开你的hadoop家目录!然后进入etc/hadoop比如我的就是:

/hadoop/hadoop-2.9.0/etc/hadoop

然后查看core-site.xml:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:8020</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/hadoop/tmp</value>
    </property>
</configuration>

其中第一个property的fs.defalutFS节点下的value,便是你本地api调用的地址加端口!

第二步

2.在hadoop的服务端调用如下命令,检查是否打开:

telnet 192.168.1.102 8020

若看到如下文本,说明服务端是没有问题的!

Trying 192.168.1.102...
Connected to test (192.168.1.102).
Escape character is '^]'.
Connection closed by foreign host.

在本地的windows端,检查客户端是否可以调通服务端ip端口:
tips:windows下的cmd命令中,调用telnet 是需要单独开启服务端,默认系统telnet命令在cmd中是调用是找不到的!
打开windows—–telnet服务链接教程:https://jingyan.baidu.com/article/3ea51489ba79e252e61bba97.html

telnet 192.168.1.102 8020

执行完毕,如果你看到的是跳入一个黑框,什么内容也没有,说明客户端也是可以调通服务端的!!!

第三步

3.查看你java代码本地的API中连接远程服务的ip以及端口是否正确HDFS_PATH(我代码中的变量)

先说我的第一步,就已经自己把自己坑了一次,我写的ip地址是对的但是端口号是错的!!!
因为是手打的,所以不小心看成了8082…..(一定要心细啊!程序猿!!!~~)

"hdfs://192.168.1.102:8082";

好了,修改完这一步现在是正确的了!

    /**
     * HDFS的路径,core-site.xml中配置的端口号
     */
    public static final String HDFS_PATH = "hdfs://192.168.1.102:8020";

本以为可以成功,然而事实是残酷的!! 依然报出Connection refused: no further information。

继续排错!!

第四步

想了想,为什么会网络被拒绝呢!无非就是找不到服务端的ip地址!!为什么找不到呢!!!
再来看下hadoop服务端的核心配置文件!

cd /hadoop/hadoop-2.9.0/etc/hadoop

然后查看core-site.xml:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:8020</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/hadoop/tmp</value>
    </property>
</configuration>

配置文件中,我采用的是localhost的形式!!!问题就出现在这里了,如果对外提供服务,写成localhost,外部请求是不识别的!

修改其核心配置文件,将localhost改为ip地址:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://192.168.1.102:8020</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/hadoop/tmp</value>
    </property>
</configuration>

再试一次!成功如下:
这里写图片描述

去服务端用命令查看下是否创建成功:

#可以迭代看到hadoop根目录的文件夹
 hadoop fs -ls -R /

这里写图片描述

可以看到上图已经有刚刚创建的hdfsapi/test目录了!

总结

哎,总之程序员这个行业真是需要细心!否则会各种被坑。。。当然本次的排错思路也少不了hadoop官方wiki,人家写的更加权威一些。链接如下:
https://wiki.apache.org/hadoop/ConnectionRefused

  • 17
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
问题中提到的"Connection refused: no further information"是一种常见的错误信息,它通常表示无法建立连接或者连接被拒绝。这个错误可以有多种原因,下面给出一些可能的解决方案。 首先,这个错误可能是由于网络问题导致的。请确保你的网络连接正常,并且目标服务器处于可访问状态。 如果网络连接正常,那么这个错误可能是由于目标服务器没有正确运行或者配置不正确导致的。可以根据错误信息中提到的zookeeper问题来排查。根据引用中的描述,你可以尝试删除zookeeper根目录下的zookeeper_server.pid文件,并重新启动zookeeper服务。这可能会解决连接问题。 另外,还有一些其他的可能原因,比如防火墙设置、端口被占用等。你可以检查防火墙设置,确保相关端口是开放的。另外,你还可以尝试使用其他端口来连接目标服务器,看是否可以建立连接。 综上所述,如果在使用IDEA时遇到"Connection refused: no further information"错误,你可以首先检查网络连接,并尝试删除zookeeper_server.pid文件。如果问题仍然存在,可以进一步排查其他可能的原因,例如防火墙设置或端口占用。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [idea远程操作hdfs Hadoop、Caused by: java.net.ConnectException: Connection refused: no further ...](https://blog.csdn.net/weixin_38625805/article/details/122058577)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [connection refused:no further information](https://blog.csdn.net/qq_45048256/article/details/122311924)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值