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

使用PySpark从Docker部署的Hadoop集群读取CSV文件时出现连接超时问题求助

解决PySpark读取Docker中Hadoop CSV时的连接超时问题

从你描述的错误来看,核心问题是Spark的Executor节点(你的两个Slave容器)无法成功连接到Hadoop NameNode的9000端口——虽然你在Hadoop UI里确认了文件路径正确,但Spark集群的工作节点没法和Hadoop集群建立稳定的网络连接,才导致了超时。下面是几个针对性的解决方案:

1. 先排查Docker容器间的网络连通性

这是最常见的根因,先确认基础网络是否通畅:

  • 登录任意一个Spark Slave容器,执行 ping my_hadoop_cluster_ip,检查能否ping通Hadoop主容器的IP
  • 再用 nc -zv my_hadoop_cluster_ip 9000 或 telnet my_hadoop_cluster_ip 9000 测试9000端口是否开放可访问
  • 如果不通,要确保所有Spark和Hadoop容器都在同一个Docker自定义网络里(默认bridge网络可能存在隔离限制),可以用 docker network ls 查看现有网络,再通过 docker network connect 命令把容器加入同一网络。

2. 修改Hadoop绑定配置,避免仅监听localhost

默认情况下,Hadoop可能只绑定了localhost地址,导致外部容器无法访问:

  • 进入Hadoop主容器,修改 $HADOOP_HOME/etc/hadoop/core-site.xml,把fs.defaultFS的地址从hdfs://localhost:9000改成Hadoop容器的实际IP或可被Spark集群解析的主机名:
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://my_hadoop_cluster_ip:9000</value>
    </property>
    
  • 同时修改 hdfs-site.xml 里的 dfs.namenode.http-address 和 dfs.datanode.address,确保它们绑定的是容器的外部可访问地址,而非localhost
  • 修改完成后重启Hadoop集群(执行 stop-all.sh 再 start-all.sh)

3. 临时调整Spark的Hadoop连接超时参数(辅助方案)

如果网络连通但偶尔出现超时,可以延长Spark的Hadoop客户端超时时间,在提交脚本时添加以下参数:

spark-submit --master spark://my_cluster_spark_ip:7077 \
  --conf spark.hadoop.hadoop.security.socket.timeout=60000 \
  --conf spark.hadoop.dfs.client.socket-timeout=60000 \
  test.py

也可以在Spark的 spark-defaults.conf 里永久添加这些配置,但这只是缓解手段,核心还是要解决网络连通问题。

4. 使用Docker主机IP替代容器内部IP

如果Hadoop容器已经把9000端口映射到了你的本地主机(比如docker run时加了 -p 9000:9000),可以把HDFS路径改成主机IP:

dfcsv = spark.read.csv("hdfs://[你的本地主机IP]:9000/user/root/input/test.csv")

如果是Docker Desktop环境,还可以用 host.docker.internal 代替主机IP,容器能直接通过这个地址访问主机的端口。

5. 解决主机名解析问题

如果Spark节点无法解析my_hadoop_cluster_ip这个主机名,可以手动在每个Spark容器的/etc/hosts里添加映射:

echo "[Hadoop主容器的实际IP] my_hadoop_cluster_ip" >> /etc/hosts

这样就能避免因为DNS解析失败导致的连接超时。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:44:06