毕设需要搭建一个hadoop集群,本来想着用docker解决很简单的事,搭个一主二从就行了,但是搭完发现浏览器端控制台和javaAPI都无法上传文件,然后又改了很多的端口映射,还是不行。
最后发现是hadoop集群datanode传输数据局域网问题,namenode只存放目录和文件名,文件内容需要通过访问datanode的IP地址存储,而datanode端口没有做映射,ip地址也是局域网ip无法访问。
接着我想把datanode的9866端口映射出去,但是两个docker容器不能同时映射同一个端口。这里还有一个主要问题是只有在linux下宿主机可以和docker容器互通,我当时用的是mac。
然后就放弃了使用docker搭建,转向虚拟机,搭到一半突然想到我可以开一个linux虚拟机,然后在虚拟机里面用docker搭建hadoop,再添加一条宿主机到docker容器的路由,这样就可以在宿主机访问hadoop集群了。下面是原理图:
添加完路由后,发现只能ping通172.17.0.1,后来查资料发现是linux的防火墙没开,会影响路由搭建的效果,随后把ufw enable,终于可以畅快的用宿主机访问docker了。