Docker容器内Hadoop集群WebHDFS连接超时问题排查求助
Docker容器内Hadoop集群WebHDFS连接超时问题排查求助
大家好,我现在遇到一个棘手的问题:从Python脚本连接Docker容器里的Hadoop HDFS实例时总是出现ConnectTimeout错误,脚本本来应该通过WebHDFS读取HDFS上的文件,但在尝试和NameNode建立连接的时候就超时了。
下面是我收到的错误信息:
requests.exceptions.ConnectTimeout: HTTPConnectionPool(host='192.168.99.100', port=50070): Max retries exceeded with url: /webhdfs/v1/user/hadoop/real_estate_data/Real_Estate_Sales.csv?user.name=modhv&offset=0&op=OPEN (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x000001E77F4D7B30>, 'Connection to 192.168.99.100 timed out. (connect timeout=None)'))
我的环境信息
- Python版本:3.12
- 使用的库:requests、urllib3、hdfs、pandas
- Docker镜像:suhothayan/hadoop-spark-pig-hive:2.9.2
- Docker版本:4.37.1
- 操作系统:Windows 11
已执行的操作
- 在Docker容器内运行Hadoop集群,计划通过WebHDFS访问HDFS
- 容器已暴露以下端口:
- 50070(NameNode)
- 50075(DataNode)
- 确认容器内的Hadoop服务(NameNode和DataNode)均正常运行
- 尝试在Python脚本中使用容器IP(172.17.0.2)甚至localhost来连接HDFS
- 用浏览器访问
http://localhost:50070和http://172.17.0.2:50070都能正常打开NameNode的Web UI,但运行Python脚本就一直报连接超时
我的Python代码如下:
from hdfs import InsecureClient import pandas as pd # Connect to HDFS using the container's IP address client = InsecureClient('http://localhost:50070') # Use the container IP # Correct HDFS file path hdfs_file_path = '/user/hadoop/real_estate_data/Real_Estate_Sales.csv' # Read the file from HDFS with client.read(hdfs_file_path) as reader: df = pd.read_csv(reader) # Display the first few rows of the DataFrame print(df.head())
再次贴出错误信息以便大家查看:
requests.exceptions.ConnectTimeout: HTTPConnectionPool(host='192.168.99.100', port=50070): Max retries exceeded with url: /webhdfs/v1/user/hadoop/real_estate_data/Real_Estate_Sales.csv?user.name=modhv&offset=0&op=OPEN (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x000001E77F4D7B30>, 'Connection to 192.168.99.100 timed out. (connect timeout=None)'))
已做的排查工作
- Hadoop服务验证:确认容器内HDFS和YARN服务都正常运行
- 端口映射检查:确认50070和50075端口已经正确暴露并映射到宿主机
- 防火墙测试:临时关闭了Windows防火墙来测试连接,问题依旧
- 浏览器连接测试:尝试用浏览器访问
http://192.168.99.100:50070,同样出现超时 - Docker网络模式:检查容器网络模式是bridge,也试过用Docker虚拟机的IP(192.168.99.100)来访问容器
备注:内容来源于stack exchange,提问作者Modhvadiya Balu
相关产品推荐
相关产品推荐

