今天在安装hadoop2.2.0时遇到若干问题,解决这些问题有些心得,记录下来以备不时之需。
问题1、master和slave之间不能相互ssh免密码登陆。
问题表象此处略过,直接说解决办法:
1、查看.ssh 目录权限是否正确。700、600 经测试都没有问题。
2、查看.ssh 目录里面文件权限是否正确。最好600.因为ssh服务需要保证此部分文件不能有篡改的风险。
3、删除id_rsa.pub文件,因为ssh登陆到对端时,对端若存在id_rsa.pub文件,则优先使用这个文件进行公钥验证,而不会使用authorized_keys文件里面保存的公钥。
4、确保/etc/hosts文件里面主机名和IP地址设置正确
5、最好把master的authorized_keys文件scp到其他salve节点中。不要文本黏贴复制,容易出错并且不好检查原因。
以上就是今天遇到的ssh不能登录的原因。
问题2、启动namenode时报错,日志显示端口已被绑定。
1、重点检查core-site.xml 、 hdfs-site.xml 、hdfs-site.xml 和yarn-site.xml 四个文件里面是否有端口服用的情况。
2、使用netstat -anl|grep 端口号 检查是否有其他进程占用此端口
问题3、执行job任务时,job状态为pending状态,不执行。
出现job挂起的情况,则表明hadoop集群未成功启动,至少有一些模块没有正常启动。首先检查master和slave各节点服务是否正常。
master正常情况存在:NameNode、SecondaryNameNode、ResourceManager
slave正常情况存在:DataNode、NodeManager
如果节点服务不正常,则在$HADOOP_HOME/logs里面检查日志中是否有报错。
问题4、slave节点启动nodeManager显示连接master节点RM报错。
首先在master检测端口是否启动。如果没有启动,则在logs目录里面检查是否有报错日志。
如果master里面端口启动了,那么在slave节点中telnet masterIP Port,看是否可以连通。(此步骤用来确定master绑定的IP和Port是否正确。)
如果telnet不同,那么检查一下master的/etc/hosts里面的127.0.0.1是否也指定为主机名了,因为操作系统会首先使用第一个主机名所对应的IP地址。(如果正式环境中各节点IP和主机名不会频繁变化,那么还是在配置文件中直接指定IP地址吧)
今天遇到的问题就是上述三个原因,也可能还有其他原因引起此种情况,但没有遇到。
问题5、job在run时,报JAVA异常,UnknownHostException:XXX 。
需要看一下这个错误是哪台节点报出来的。今天遇到的都是master报出来的。开始以为是master连接不上对应节点,导致排查方向出错。后来才搞清楚,slave节点报错也会显示在master。因此master报错不一定表示是master节点的问题,也有可能是某一台slave节点的问题。
问题原因是slave1的/etc/hosts没有配置slave2的主机名,导致两台slave再通讯时异常,配置/etc/hosts后恢复正常。