初学hadoop时第一步就是搭建环境,本文重点关注hadoop分布式环境搭建过程中namenode因端口占用无法启动的报错,现分析如下:
错误日志:
“BindException: Problem binding to cs-01.localhost.localdomain/192.168.0.4:9001 : Address already in use”
日志分析:在启动hadoop时,namenode进程会绑定用户在core-site.xml中fs.default.name制定的端口号,由于该端口号已经被其他进程占用,自然namenode进程无法绑定该端口号,所以namenode无法启动。
解决方案:
1.确定fs.default.name 中指定的ip地址与/etc/hosts中配置的域名解析一致。
例:在core-site.xml中,设置有:
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
则在/etc/hosts中,需要设置master对应的ip地址,否则hadoop将无法解析ip地址。
2.杀死目前其他占用端口的进程
通过“netstat -apn | grep 端口号”命令查看绑定端口号的当前运行进程;
通过“kill pID”杀死占用着端口号的进程;
重新启动hadoop;
3.namenode默认的9000端口被系统进程占用,即使你在2中把进程kill掉,过一段时间系统会自动重启被kill的进程。这个时候我们可以再core-site.xml中改变fs.default.name属性对应的端口号。
例: <property>
<name>fs.default.name</name>
<value>hdfs://master:47000</value>
</property>
4.若以上各步做完,依旧无法启动namenode,请重启机器吧。(本人在搭建环境中花了半天,尝试网上各种解决方案都无果,结果重启机器后,hadoop就能正常启动了。
以上供大家参考,用代码堆砌世界,共同进步!