HDFS读取问题:HTTPConnectionPool(host=, port=50075): Max retries exceeded

本文详细解析了在使用Python操作HDFS时遇到的连接错误问题,并提供了一种有效的解决方案,即通过修改主机文件来确保HDFS节点与IP地址的正确映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用python读写HDFS时,遇到以下问题:

ConnectionError: HTTPConnectionPool(host='node1.******.com', port=50075): Max retries exceeded with url: /webhdfs/v1/mytest/products/Trace_info.db?op=OPEN&user.name=root&namenoderpcaddress=node4.******.com:8020&offset=0 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f7579ec7e10>: Failed to establish a new connection: [Errno -2] Name or service not known',))

只要出现Failed to establish a new connection就可以使用以下方法(将HDFS节点与IP对应关系增加到host文件)解决

参考资料:

https://blog.youkuaiyun.com/shen_ness/article/details/82786261

 

<think>嗯,用户遇到了上传文件和去重数据时的错误,提示是HTTPConnectionPool问题,具体是Max retries exceeded,还有WinError 10061,目标计算机积极拒绝连接。首先,我需要分析这个错误的原因。根据错误信息,最可能的情况是网络连接问题,或者目标服务器不可达。 首先,检查主机和端口是否正确。用户用的是192.168.133.163:9870,需要确认这个地址和端口是否确实对应HDFS的WebHDFS服务。HDFS的默认端口通常是50070,但如果是配置过的环境,可能用了其他端口,比如9870。所以需要用户确认配置是否正确。 然后,考虑网络连通性问题。用户是在Windows上运行,出现10061错误,说明尝试连接时被拒绝。可能的原因包括防火墙阻止了连接,或者目标服务器没有在监听该端口。需要让用户用telnet或ping来测试连通性。例如,telnet 192.168.133.163 9870,如果无法连接,说明端口不通。或者用ping看主机是否可达。 接下来,HDFS服务状态是否正常。如果服务器上的HDFS服务没有运行,或者WebHDFS功能未启用,也会导致连接失败。需要用户检查服务是否启动,比如NameNode、DataNode是否运行正常,以及WebHDFS的配置是否正确。 另外,检查URL中的参数是否有误。用户的URL中有sj230136刘杭雨这样的中文字符,可能涉及到URL编码问题。需要确保路径部分正确编码,比如使用UTF-8编码后的格式。例如,“刘杭雨”应该被转换为百分号编码,如%E5%88%98%E6%9D%AD%E9%9B%A8,用户已经这样做了,但可能需要进一步确认路径是否存在。 还有用户身份验证的问题,这里用的是user.name=root,但HDFS可能配置了权限控制,需要确认root用户是否有权限访问该路径,或者是否需要进行Kerberos认证等。 另外,考虑是否是客户端配置错误,比如Hadoop客户端的配置文件(core-site.xml, hdfs-site.xml)是否正确指向了目标HDFS集群,端口是否匹配。 可能的解决步骤包括: 1. 检查网络连通性:使用ping和telnet测试主机和端口是否可达。 2. 确认HDFS服务状态:在服务器上检查相关服务是否运行。 3. 验证WebHDFS配置:确认hdfs-site.xml中的配置是否启用了WebHDFS,端口是否正确。 4. 检查路径和编码:确认URL中的路径是否正确,特别是中文字符部分是否需要进一步处理。 5. 用户权限:确认使用的user.name参数是否有权限执行操作。 6. 查看日志:检查HDFS服务器的日志,寻找连接失败的详细原因。 如果用户是在Windows上运行Python脚本使用urllib3或requests库,可能还需要考虑代理设置或本地防火墙的问题,是否阻止了出站连接。此外,是否有其他安全软件拦截了连接尝试。 总结下来,需要逐步排查网络、服务状态、配置、权限等方面的问题,才能确定具体原因。</think>### 错误分析及解决步骤 您遇到的错误属于 **网络连接类问题**,具体表现为客户端无法与HDFS服务端建立连接。以下是分步排查和解决方案: --- #### 一、错误原因定位 1. **错误信息解读**: - `HTTPConnectionPool(host='192.168.133.163', port=9870)`:尝试连接的主机地址和端口 - `Max retries exceeded`:达到最大重试次数仍失败 - `WinError 10061`:目标主机主动拒绝连接(**服务未启动**或**网络不通**) 2. **核心问题**: - **HDFS服务未运行**:目标主机未启动HDFS服务 - **防火墙/安全组拦截**:端口9870被防火墙或安全策略阻止 - **配置错误**:客户端配置的主机地址或端口与实际HDFS服务不匹配 --- #### 二、排查步骤 ##### 1. 验证网络连通性 - **步骤1:Ping目标主机** ```bash ping 192.168.133.163 ``` - 若不通:检查网络配置、物理连接、目标主机是否在线 - 若通:继续下一步 - **步骤2:检查端口可访问性** **Windows** 使用 `Test-NetConnection`: ```powershell Test-NetConnection 192.168.133.163 -Port 9870 ``` **Linux/Mac** 使用 `telnet` 或 `nc`: ```bash telnet 192.168.133.163 9870 # 或 nc -zv 192.168.133.163 9870 ``` - 若端口不通:检查防火墙或安全组是否放行9870端口 ##### 2. 检查HDFS服务状态 - **登录目标主机**(192.168.133.163),执行以下命令: ```bash # 检查NameNode服务状态(HDFS核心服务) jps | grep NameNode # 检查WebHDFS是否启用 grep -A 10 '<name>dfs.webhdfs.enabled</name>' ${HADOOP_HOME}/etc/hadoop/hdfs-site.xml ``` - 预期输出:`<value>true</value>`(WebHDFS需启用) ##### 3. 验证HDFS配置 - **确认HDFS端口号**: 检查 `${HADOOP_HOME}/etc/hadoop/hdfs-site.xml` 中的配置项: ```xml <!-- 默认WebHDFS端口为50070,若修改需保持一致 --> <property> <name>dfs.namenode.http-address</name> <value>192.168.133.163:9870</value> </property> ``` ##### 4. 检查路径合法性 - **URL编码问题**: 路径 `/sj230136刘杭雨` 中的中文需进行URL编码,但错误信息中显示已编码为 `%E5%88%98%E6%9D%AD%E9%9B%A8`,符合规范。 - **路径是否存在**: 通过HDFS命令验证路径: ```bash hadoop fs -ls /sj230136刘杭雨 ``` --- #### 三、解决方案 1. **启动HDFS服务**(若服务未运行): ```bash # 在HDFS主节点执行 ${HADOOP_HOME}/sbin/start-dfs.sh ``` 2. **开放防火墙端口**: - **Windows**:在“高级安全Windows Defender防火墙”中添加入站规则,允许TCP 9870 - **Linux**: ```bash sudo ufw allow 9870/tcp sudo systemctl restart ufw ``` 3. **修正客户端配置**: - 检查代码中HDFS连接地址是否与 `hdfs-site.xml` 中的配置一致。 4. **使用完整WebHDFS URL**: ```python # Python示例代码 import requests url = "http://192.168.133.163:9870/webhdfs/v1/sj230136刘杭雨?op=LISTSTATUS&user.name=root" response = requests.get(url, allow_redirects=True) ``` --- #### 四、附加建议 - **日志分析**:检查HDFS日志 `${HADOOP_HOME}/logs/hadoop-root-namenode-*.log`,定位服务端错误。 - **代理设置**:若客户端通过代理访问,需在代码中配置代理参数。 - **权限问题**:确保 `user.name=root` 有权限访问路径(检查HDFS ACL)。 通过上述步骤,可系统性定位并解决连接问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值