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

从MySQL导入数据到Hadoop遇连接异常,请求技术支持

问题分析与解决方案

从你的错误日志里能看到两个核心问题:

  1. java.net.UnknownHostException: host: host: unknown error:主机名解析失败,Hadoop无法正确识别你的机器主机名
  2. java.net.ConnectException: Connection refused:无法连接到HDFS的NameNode端口(默认9000)

下面是一步步的排查和修复步骤:

1. 修复主机名解析问题

首先,确保你的机器主机名能正确解析到127.0.0.1或者你的实际IP:

  • 编辑/etc/hosts文件(Linux/macOS)或者C:\Windows\System32\drivers\etc\hosts(Windows)
  • 添加一行:127.0.0.1 your-hostname(把your-hostname换成你机器的实际主机名,可通过hostname命令查看)
  • 保存文件后,执行ping your-hostname验证是否能解析到正确的IP

2. 检查HDFS服务状态

连接被拒绝通常是因为NameNode没启动,或者端口配置不对:

  • 执行jps命令,查看是否有NameNode进程在运行
  • 如果没有,启动HDFS服务:start-dfs.sh(Linux/macOS)或者对应的Windows启动脚本
  • 验证NameNode是否正常:访问http://localhost:50070(Hadoop 2.x)或者http://localhost:9870(Hadoop 3.x),确认服务正常

3. 确认HDFS端口配置

检查Hadoop的core-site.xml文件(通常在$HADOOP_HOME/etc/hadoop目录下),确认以下配置是否正确:

<property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
</property>

如果你的NameNode用了其他端口,要同步修改这个配置项,然后重启HDFS服务。

4. 处理HDFS目标路径问题

Sqoop默认不允许写入已存在的目录,你可以二选一:

  • 先手动删除目标目录:hadoop fs -rm -r /sqoopout
  • 或者在Sqoop命令里添加--delete-target-dir参数强制覆盖:
sqoop import --connect jdbc:mysql://localhost/sqoopdb --username 'root' -P --table 'company' --target-dir '/sqoopout' --delete-target-dir -m 1

另外,要确保执行Sqoop的用户有HDFS的写入权限,可通过hadoop fs -mkdir /sqoopout先手动创建目录测试权限。

5. 验证MySQL连接(可选)

虽然错误主要在HDFS这边,但可以先确认MySQL连接是否正常:

sqoop eval --connect jdbc:mysql://localhost/sqoopdb --username 'root' -P --query "SELECT * FROM company LIMIT 1"

如果这个命令能正常返回数据,说明MySQL连接没问题,问题确实在Hadoop侧。

按照上面的步骤排查下来,应该能解决你的导入问题。如果还有疑问,把排查过程中的结果补充上来,我再帮你分析。

内容的提问来源于stack exchange,提问作者Saurabh P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:02:44