1.再搞一台机器,用相同的方法部署hadoop
2.修改/etc/hosts
把机器A设置为master namenode slave1 datanode1
把机器B设置为slave2 datanode2
修改conf/下masters和slaves两个配置文件,把localhost改成以下内容
masters文件:
master
slaves文件:
slave1
slave2
3.把之前三个xml配置文件中的localhost根据实际情况改成相关的机器名。
4.
把原来的hdfs tmp/目录删除,重建,chmod 755 -R
格式化
hadoop namenode -format
jps是个好命令
运行start-all.sh
接着发现启动失败,日志中提示:
14/02/11 18:23:12 INFO ipc.Server: IPC Server handler 9 on 9000: exiting
14/02/11 18:23:12 INFO ipc.Server: Stopping IPC Server listener on 9000
14/02/11 18:23:12 INFO ipc.Server: Stopping IPC Server Responder
14/02/11 18:23:12 INFO metrics.RpcInstrumentation: shut down
14/02/11 18:23:12 ERROR namenode.NameNode: java.net.ConnectException: Call to 10-7-2-132/127.0.0.1:9000 failed on connection exception: java.net.ConnectException: Connection refused
at org.apache.hadoop.ipc.Client.wrapException(Client.java:1142)
at org.apache.hadoop.ipc.Client.call(Client.java:1118)
一开始以为是网络连接问题,于是写了一个脚本teeport.py,发现机器之间连接的确不通。
但咨询了UCloud客户后发现,运行netstat -l,监听的是localhost:9000,是我程序写错了。不是
serversocket.bind((socket.gethostname(), port))
而是
serversocket.bind((’0.0.0.0′, port))
之后确认机器之间网络连接是好的。
之后再追查,咨询了一下STL的兄弟,发现是/etc/hosts里有一个多余项。
127.0.0.1 10-7-2-132
怀疑可能是bind了127.0.0.1,把它注释掉就可以了。
再重启,namenode启动成功,但datanode有一台机器启动不了,提示文件系统id不兼容。
把所有的hdfs/ tmp/数据目录删除,重建,这回是datanode启动不了,提示io exception
怀疑是目录权限问题,把hdfs/ tmp/递归改成755的权限就好。
再运行start-all.sh就可以在监控页面上看到hadoop集群和hdfs集群有两个node了
5.由于默认hostname在外网不可访问,需要修改/etc/hosts和/etc/hostname,并且运行sudo hostname new_hostname来生效
现在可以方便地跑hadoop任务了。