Mac M1 Docker Hadoop集群WebHDFS上传文件遇域名解析错误求助
解决WebHDFS上传时Docker容器主机名无法解析的问题
问题根源
你遇到的curl: (6) Could not resolve host: fcb6de72d72d错误,核心原因是Docker集群内的DataNode返回的重定向地址用了容器内部的主机名,而你的Mac本地DNS无法识别这个名字对应的IP,导致解析失败。
快速临时解决方法
直接把curl命令里的容器主机名替换成DataNode容器的实际IP:
- 先查询DataNode容器的IP:
输出会类似docker inspect fcb6de72d72d | grep -i "ipaddress""IPAddress": "172.17.0.3",记下这个IP地址。 - 修改curl命令,将
fcb6de72d72d替换为刚才拿到的IP:
执行修改后的命令即可完成上传。curl -i -X PUT -T file.txt "http://172.17.0.3:9864/webhdfs/v1/root/EMSI/file.txt?op=CREATE&namenoderpcaddress=namenode:9000&createflag=&createparent=true&overwrite=false"
长期根治方案(修改Hadoop配置)
如果不想每次都手动替换IP,可以通过修改Hadoop配置让WebHDFS返回宿主机可访问的地址:
- 进入Hadoop集群的配置目录(通常为
$HADOOP_HOME/etc/hadoop),编辑hdfs-site.xml,添加以下配置项:<property> <name>dfs.datanode.use.datanode.hostname</name> <value>true</value> </property> <property> <name>dfs.client.use.datanode.hostname</name> <value>true</value> </property> - 重启所有Hadoop节点(NameNode、DataNode)使配置生效。
- 在Mac本地的
/etc/hosts文件中添加DataNode容器IP与主机名的映射,示例:
完成后本地就能直接解析容器主机名,后续调用WebHDFS时自动跟随重定向也不会报错。172.17.0.3 fcb6de72d72d
额外技巧:让curl自动处理重定向
配置好hosts映射后,可直接用-L参数让curl自动处理307重定向,无需手动复制Location地址:
curl -i -L -X PUT -T file.txt "http://<namenode-host>:50070/webhdfs/v1/root/EMSI/file.txt?op=CREATE&createparent=true&overwrite=false"
(将<namenode-host>替换为你集群NameNode的实际访问地址)
内容的提问来源于stack exchange,提问作者Kate
相关产品推荐
相关产品推荐

