You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark读取CSV失败:Connection Refused问题排查求助

问题描述

我尝试用PySpark读取CSV文件,安装Hadoop前能正常读取,但换成Java 8并安装Hadoop后无法读取,报错如下:

23/03/15 18:52:47 WARN FileStreamSink: Assume no metadata directory. Error while looking for metadata directory in the path: ../sales.csv.
java.net.ConnectException: Call From MacBook-Pro-890.local/127.0.0.1 to localhost:9000 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused

仅修改过Java版本和JAVA_HOME,怀疑是配置变更导致的问题,作为PySpark和Hadoop新手,查文档没头绪,该从哪开始排查?

相关配置信息:

core-site.xml

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

hdfs-site.xml

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

zshrc

## JAVA env
export PATH="/usr/local/mysql/bin:$PATH"
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"

## MAVEN env
export M2_HOME=/usr/local/apache-maven-3.9.0
export PATH=${PATH}:${M2_HOME}/bin

## Homebrew env
export PATH=/opt/homebrew/bin:$PATH
export PATH=/opt/homebrew/sbin:$PATH

export PYSPARK_DRIVER_PYTHON="jupyter"
export PYSPARK_DRIVER_PYTHON_OPTS="notebook"

export SPARK_HOME=/opt/homebrew/Cellar/apache-spark/3.3.2/libexec 
export PATH=$SPARK_HOME/bin:$PATH 

export SPARK_OPTS="--packages graphframes:graphframes:0.8.2-spark3.0-s_2.12"

## HADOOP env variables
export HADOOP_HOME="/opt/homebrew/Cellar/hadoop/3.3.4/libexec"
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export HADOOP_CLASSPATH=${JAVA_HOME}/lib/tools.jar
排查步骤

1. 检查HDFS服务状态

安装Hadoop后,PySpark默认会使用HDFS作为文件系统(因core-site.xml配置了fs.defaultFS=hdfs://localhost:9000),若HDFS未启动就会触发连接拒绝错误:

  • 执行jps命令,查看输出中是否有NameNode和DataNode进程,没有则说明HDFS未启动。
  • 启动HDFS:执行start-dfs.sh,再次用jps确认进程是否正常运行。

2. 临时切换本地文件系统测试

若只是读取本地CSV,无需HDFS,可在读取路径前加上本地文件系统前缀file://,示例代码:

df = spark.read.csv("file:///absolute/path/to/sales.csv")

如果这样能正常读取,说明问题确实出在HDFS的配置或服务上。

3. 验证HDFS连接可用性

  • 执行hdfs dfs -ls /,若能返回HDFS根目录内容,说明HDFS服务和配置无问题;若仍报错连接拒绝,继续排查。
  • 用lsof -i :9000检查端口9000是否被其他程序占用,若有则停止对应进程,或修改HDFS配置文件更换端口。

4. 确认Hadoop配置生效

  • 执行echo $HADOOP_CONF_DIR,确认输出路径与zshrc中配置的/opt/homebrew/Cellar/hadoop/3.3.4/libexec/etc/hadoop一致。
  • 执行hadoop version,查看Hadoop是否正常识别Java 8环境,排除版本兼容问题。

5. 首次安装需初始化HDFS

如果是首次安装Hadoop,未格式化HDFS会导致NameNode无法启动:

  • 执行hdfs namenode -format完成格式化,之后再启动HDFS服务start-dfs.sh。

内容的提问来源于stack exchange,提问作者asmallpotato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 09:37:11