之前用Whirr在AWS EC2上创建了一个Hadoop集群,我想更改一些配置,比如hadoop-site.xml,mapred-site.xml这些文件中的系统配置。更改完之后需要重启hadoop,结果就遇到麻烦了。Whirr这个工具是有stop-services, start-services和restart-services这些命令的,但是我试了一下,竟然无效。用putty登录到master机器里面,到hadoop目录下用stop-all.sh和start-all.sh重启也不行,因为whirr在创建和启动hadoop的时候用的用户名是"hadoop",而我登录进去的用户名是另外一个,比如我的是"liu"。就算用sudo也不行。
在网上找了半天,最后找到这个,虽然他们说的是Hbase,但是我试了一下,里面的方法在普通的hadoop里面也可以。
具体方法是:
首先,改"hadoop"用户的密码,这样我们才能切换成"hadoop"用户:
sudo passwd hadoop
给hadoop用户建立个用户目录,并且授权:
sudo mkdir /home/hadoop
sudo chown hadoop /home/hadoop
然后切换到"hadoop"用户:
su hadoop
之后再执行:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
cat /home/users/liu/.ssh/authorized_keys >> ~/.ssh/authorized_keys
这样再到hadoop的安装目录下的bin中,执行stop-all.sh和start-all.sh就可以了。
P.S. 虽然这样解决了重启的问题,不过我并不是完全理解。我觉得这个方法只能重启master上的hadoop,那些slave上的hadoop应该没有重启。如果有明白的朋友望赐教。