【问题标题】:Hadoop - java.net.ConnectException: Connection refusedHadoop - java.net.ConnectException:连接被拒绝
【发布时间】:2026-01-04 22:05:03
【问题描述】:

我想连接到 hdfs(在 localhost 中),但出现错误:

从 despubuntu-ThinkPad-E420/127.0.1.1 到 localhost:54310 的调用因连接异常失败:java.net.ConnectException:连接被拒绝;更多详情见:http://wiki.apache.org/hadoop/ConnectionRefused

我遵循其他帖子中的所有步骤,但我没有解决我的问题。我使用 hadoop 2.7,这是配置:

核心站点.xml

<configuration>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/despubuntu/hadoop/name/data</value>
  </property>

  <property>
    <name>fs.default.name</name>
    <value>hdfs://localhost:54310</value>
  </property>
</configuration>

hdfs-site.xml

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
</configuration>

我输入 /usr/local/hadoop/bin/hdfs namenode -format 和 /usr/local/hadoop/sbin/start-all.sh

但是当我输入“jps”时,结果是:

10650 Jps
4162 Main
5255 NailgunRunner
20831 Launcher

我需要帮助...

【问题讨论】:

  • 尝试在/etc/hosts 文件中将127.0.1.1 更改为127.0.0.1。重启hadoop进程。
  • @RajeshN 你能解释一下吗?

标签: hadoop connection-refused


【解决方案1】:

确保core-site.xml 中设置为端口9000 的DFS 已实际启动。您可以使用jps 命令进行检查。你可以用sbin/start-dfs.sh开始它

【讨论】:

    【解决方案2】:

    我猜您没有正确设置您的 hadoop 集群,请按照以下步骤操作:

    第一步:从设置.bashrc开始:

    vi $HOME/.bashrc
    

    将以下行放在文件末尾:(将 hadoop home 更改为您的)

    # Set Hadoop-related environment variables
    export HADOOP_HOME=/usr/local/hadoop
    
    # Set JAVA_HOME (we will also configure JAVA_HOME directly for Hadoop later on)
    export JAVA_HOME=/usr/lib/jvm/java-6-sun
    
    # Some convenient aliases and functions for running Hadoop-related commands
    unalias fs &> /dev/null
    alias fs="hadoop fs"
    unalias hls &> /dev/null
    alias hls="fs -ls"
    
    # If you have LZO compression enabled in your Hadoop cluster and
    # compress job outputs with LZOP (not covered in this tutorial):
    # Conveniently inspect an LZOP compressed file from the command
    # line; run via:
    #
    # $ lzohead /hdfs/path/to/lzop/compressed/file.lzo
    #
    # Requires installed 'lzop' command.
    #
    lzohead () {
        hadoop fs -cat $1 | lzop -dc | head -1000 | less
    }
    
    # Add Hadoop bin/ directory to PATH
    export PATH=$PATH:$HADOOP_HOME/bin
    

    第 2 步:编辑 hadoop-env.sh 如下:

    # The java implementation to use.  Required.
    export JAVA_HOME=/usr/lib/jvm/java-6-sun
    

    第 3 步:现在创建一个目录并设置所需的所有权和权限

    $ sudo mkdir -p /app/hadoop/tmp
    $ sudo chown hduser:hadoop /app/hadoop/tmp
    # ...and if you want to tighten up security, chmod from 755 to 750...
    $ sudo chmod 750 /app/hadoop/tmp
    

    第 4 步:编辑 core-site.xml

    <property>
      <name>hadoop.tmp.dir</name>
      <value>/app/hadoop/tmp</value>
    </property>
    
    <property>
      <name>fs.default.name</name>
      <value>hdfs://localhost:54310</value>
    </property>
    

    第 5 步:编辑 mapred-site.xml

    <property>
      <name>mapred.job.tracker</name>
      <value>localhost:54311</value>
    </property>
    

    第 6 步:编辑 hdfs-site.xml

    <property>
      <name>dfs.replication</name>
      <value>1</value>
    </property>
    

    最后格式化你的 hdfs(你需要在第一次设置 Hadoop 集群时这样做)

     $ /usr/local/hadoop/bin/hadoop namenode -format
    

    希望对你有帮助

    【讨论】:

    • 谢谢,它解决了未创建 tmp 文件夹的问题
    • 在我的例子中,我只需要从文件 hadoop-env.sh 中的 export JAVA_HOME=/usr/lib/jvm/java-6-sun/ 行中删除一个尾部斜杠
    【解决方案3】:

    我遇到了同样的问题。您可以在键入时看到名称节点、数据节点、资源管理器和任务管理器守护程序正在运行。所以只需执行 start-all.sh 然后所有守护进程开始运行,现在您可以访问 HDFS。

    【讨论】:

      【解决方案4】:

      首先通过在命令行输入jps 命令检查java 进程是否正常工作。在运行 jps 命令时,必须运行以下进程-->>

      • 数据节点
      • jps
      • 名称节点
      • SecondaryNameNode

      如果以下进程没有运行,则首先使用以下命令启动名称节点-->> start-dfs.sh

      这对我有用,并消除了你所说的错误。

      【讨论】:

        【解决方案5】:

        我遇到了类似的错误。检查后我发现我的namenode服务处于停止状态。

        检查名称节点sudo status hadoop-hdfs-namenode的状态

        如果它没有处于启动/运行状态

        启动namenode服务sudo start hadoop-hdfs-namenode

        请记住,名称节点服务在重新启动后需要一段时间才能完全发挥作用。它读取内存中的所有 hdfs 编辑。您可以在 /var/log/hadoop-hdfs/ 中使用命令tail -f /var/log/hadoop-hdfs/{Latest log file} 来查看进度

        【讨论】: