最近學習Hadoop 時發現在本機訪問 hadoop 9000 端口沒有問題,但是遠程機器訪問 9000端口時不能訪問,通過telnet 命令診斷發現發現無法訪問端口,經過網上搜索解決方案結合自己實踐,總結解決辦法一般有以下幾點。
首先,利用netstat -tpnl查看的端口開放情況
下圖中9000端口只能本機訪問

下圖中的9000端口可以通過192.168.1.105訪問

1、防火牆未關閉或防火牆打開但是為開放9000端口
解決辦法:通過 service iptables stop 命令關閉防火牆(開發環境一般直接關閉防火牆,生產環境需要配置防火牆,具體配置可以網上搜索)
2、配置本機名與地址的映射
解決辦法: 修改/etc/hosts 文件,加入 IP地址與機器名的映射關系。
如下圖紅框所示:
duanxz@three:/usr/local/hadoop-2.7.6/logs$ cat /etc/hosts
192.168.1.105 three
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost4 localhost4.localdomain4
注意,若發現127.0.0.1 與機器名存在映射關系,需要刪除映射關系(如下圖紅色框所示),否則hadoop 會把機器名映射到127.0.0.1 上去,也就是我遇到的問題,本機可以訪問,其他機器不能訪問。
正確的是
網絡配置好后,hadoop相關的很多東西要重新設置一次。
1、ssh的重新配置
2、hadoop中相關配置中的localhost修改為域名,如示例中three,主要是core-site.xml
3、hadoop namenode -format
若格式化時顯示機器名與Ip映射關系為127.0.0.1 那么說明配置不成功,只能本機訪問:
若格式化時顯示機器名與IP映射關系為正常的網絡地址,說明配置成功。如下圖所示:
3、重啟hadoop
測試:
1、換一台機器,telnet相應的ip:port成功:
2、java客戶端連接