PyHdfs操作HDFS报错Expected JSON,WebHDFS是否启用?求解决
解决pyhdfs连接HDFS时出现的「Expected JSON. Is WebHDFS enabled? Got ''」错误
我之前也碰到过一模一样的报错,核心原因就是WebHDFS没有正确启用,或者你的连接参数和HDFS实际配置不匹配,咱们一步步来排查解决:
1. 确认HDFS是否开启WebHDFS功能
登录你的Hadoop namenode节点,找到HDFS配置文件hdfs-site.xml(通常在$HADOOP_HOME/etc/hadoop目录下),检查是否包含以下配置:
<property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property>
如果没有这段配置就添加它;如果value是false,直接改成true即可。
2. 重启HDFS服务让配置生效
修改配置后必须重启HDFS才能让WebHDFS生效,执行以下命令:
# 停止HDFS服务 stop-dfs.sh # 启动HDFS服务 start-dfs.sh
如果你的Hadoop是用systemd管理的,也可以用:
sudo systemctl restart hadoop-namenode sudo systemctl restart hadoop-datanode
3. 验证WebHDFS是否正常运行
用curl命令测试WebHDFS接口,确认能返回正常的JSON数据:
curl http://34.71.193.160:50070/webhdfs/v1/user/input?op=LISTSTATUS
如果返回结构化的JSON内容,说明WebHDFS已经正常工作;如果还是空白或报错,继续检查配置和服务状态。
4. 修正pyhdfs的连接参数
注意:WebHDFS的默认端口是50070,你代码里用的8123大概率不是WebHDFS的端口(8123通常是HiveServer2或其他服务的端口),修正后的代码示例:
hdfs = pyhdfs.HdfsClient(hosts='34.71.193.160:50070', user_name='root') files_name = hdfs.listdir('/user/input/')
5. 额外排查点
- 防火墙检查:确保namenode节点的50070端口对外开放,能被你的客户端正常访问
- 权限验证:确认
root用户有访问/user/input目录的权限,可以在HDFS上执行hdfs dfs -ls /user/input测试
内容的提问来源于stack exchange,提问作者Charlie
相关产品推荐
相关产品推荐

