HDFS Web UI 预览文件报错:原因与解决办法总结

HDFS Web UI 预览文件报错:原因与解决办法总结


一、问题现象

在 HDFS Web UI(http://localhost:9870)中,点击文件进行预览时,浏览器报错:

text

复制代码
NetworkError: Failed to execute 'send' on 'XMLHttpRequest': 
Failed to load 'http://mujinqiu.localdomain:9864/webhdfs/v1/...'

或者在文件详情页能看到文件信息(大小、Block ID),但无法显示文件内容


二、根本原因

核心原因:DataNode 地址无法解析

HDFS 的 WebHDFS 请求流程如下:

text

复制代码
浏览器 → NameNode (9870) → 返回 DataNode 地址 → 浏览器请求 DataNode (9864) → 返回文件内容
                      ↓
           DataNode 地址: mujinqiu.localdomain:9864

问题 :DataNode 返回的地址是 mujinqiu.localdomain(WSL2 的主机名),但:

环境 是否认识 mujinqiu.localdomain
WSL2 内部 ✅ 认识(本地 hosts 有映射)
Windows 宿主机 不认识(没有 DNS 解析)

浏览器在 Windows 上运行,无法解析 mujinqiu.localdomain,导致请求失败。


三、为什么 DataNode 返回的是主机名?

Hadoop 在启动时,NameNode 会读取 DataNode 注册时上报的地址。DataNode 默认使用操作系统的主机名hostname)作为自己的地址。

WSL2 的主机名是 mujinqiu,加上默认域名后缀 .localdomain,所以返回 mujinqiu.localdomain


四、解决办法

✅ 方法一:修改 Windows hosts 文件(推荐,一劳永逸)

原理 :让 Windows 能解析 mujinqiu.localdomain,将其指向 WSL2 的 IP。

操作步骤

  1. 获取 WSL2 当前 IP:

    powershell

    复制代码
    wsl -- hostname -I

    输出示例:192.168.1.202

  2. 管理员身份 打开记事本,编辑 C:\Windows\System32\drivers\etc\hosts

  3. 添加一行:

    text

    复制代码
    192.168.1.202  mujinqiu.localdomain
  4. 保存文件,验证:

    cmd

    复制代码
    ping mujinqiu.localdomain

    能 ping 通即表示配置成功。

  5. 刷新浏览器,重新预览文件。

优点:一次配置,永久生效,不需要重启任何服务。


✅ 方法二:修改 Hadoop 配置,强制 DataNode 使用 IP

原理:让 DataNode 上报 IP 地址而不是主机名。

操作步骤

编辑 $HADOOP_HOME/etc/hadoop/hdfs-site.xml,添加:

xml

复制代码
<property>
    <name>dfs.client.use.datanode.hostname</name>
    <value>false</value>
</property>
<property>
    <name>dfs.datanode.use.datanode.hostname</name>
    <value>false</value>
</property>

重启 Hadoop:

bash

复制代码
hive-stop
hive-start

缺点:需要重启服务,且如果 WSL2 IP 变化,需要重新配置。


✅ 方法三:修改 WSL2 的 hosts 文件

原理 :让 WSL2 内部使用 127.0.0.1 解析主机名。

操作步骤

bash

复制代码
sudo nano /etc/hosts

添加:

text

复制代码
127.0.0.1   mujinqiu.localdomain

缺点:只对 WSL2 内部请求有效,浏览器在 Windows 上运行,仍然无法解析。


✅ 方法四:使用命令行查看数据(备用方案)

如果 Web UI 预览一直有问题,可以直接用命令行查看数据:

bash

复制代码
# 查看文件内容
hdfs dfs -cat /user/hive/warehouse/表名/数据文件

# 下载到本地
hdfs dfs -get /user/hive/warehouse/表名/数据文件 /tmp/data.txt
cat /tmp/data.txt

五、特殊情况:Web UI 能看到文件信息但看不到内容

如果 hosts 配置正确后,Web UI 不再报错,但点击文件后只显示文件信息(大小、Block ID 等),看不到数据内容,这是 Web UI 预览功能本身的限制或浏览器兼容性问题。

解决方法

  • 使用 hdfs dfs -cat 命令查看(最可靠)

  • 使用 DBeaver/Beeline 执行 SELECT * FROM 表名; 查看

  • 下载文件到本地查看

bash 复制代码
# 查看文件内容
hdfs dfs -cat /user/hive/warehouse/test/000000_0

六、总结

问题 原因 推荐解决方案
Web UI 预览报错 NetworkError Windows 无法解析 DataNode 主机名 mujinqiu.localdomain 修改 Windows hosts 文件,添加 IP → 主机名映射
Web UI 能看到文件信息但看不到内容 Web UI 预览功能本身限制或浏览器兼容问题 使用 hdfs dfs -cat 命令行查看

✅ 核心一句话

HDFS Web UI 预览文件报错,大概率是 Windows 无法解析 DataNode 返回的主机名。修改 Windows hosts 文件,将 mujinqiu.localdomain 指向 WSL2 的 IP 即可解决。