目标:

在配置hadoop分布式安装过程中,需要配置ssh的无密码登录。在组建hadoop集群的时候,需要多台实体机进行通信(发送或者读取数据,namenode和datanode之间)就是借助ssh,在通信过程中如果需要操作人员频繁输入密码是不切实际的,所以需要ssh的无密码登录。

环境:

  • 主机hadoop0,namenode,centos6.4 操作系统,用户名hadoop
  • 从机hadoop1,datanode,centos6.4 操作系统,用户名hadoop
  • JDK1.7
  • Hadoop 2.2.0
  • HBase 0.90.5


配置:

ufs disable。并确保安装ssh spenssh-server。

在主机hadoop0中执行以下命令:

  1. cd ~/.ssh
  2. ssh-keygen -t rsa
  3. cp id_rsa.pub authorized_keys   (把公钥复制一份,并改名为authorized_keys,这步执行完,应该ssh localhost可以无密码登录本机了,可能第一次要密码)
  4. scp authorized_keyshadoop@hadoop1:/home/hadoop/.ssh 
  5. chmod 600 authorized_keys
  6. ssh hadoop1 




注意:

在安装分布式hadoop过程中,需要将所有机子的用户名改为一样,如我的例子:hadoop。在linux下,有“主机名”和“用户名”之分。“主机名”相当与机子的IP,是该机子的唯一标识(可以用命令hostname来查看本机主机名),而一个操作系统可以有多个用户,每个用户都有用户名,如我的hadoop(root也是一个用户,只不过权限比较大)。

我们如果要访问其他主机,都是通过对方的ip来访问,比如ping 192.168.137.101.既然主机名也是标识,为什么不能ping hadoop1呢。因为当前机子步识别这个主机名,需要修改/etc/profile文件如下:





 

如何登陆hadoop账号_主机名




现在就把ip和主机名一一对应起来,也就可以ping hadoop1了。

hadoop1主机下的hadoop用户,所以我只能远程控制该用户。再看上面第6步,要登录hadoop1的hadoop用户,命令应该是ssh hadoop@hadoop1,为什么是ssh hadoop1就可以呢。因为ssh hadoop1会默认以当前主机的用户名(也就是hadoop0的hadoop)来远程登录。因为hadoop0和hadoop1两个机子的用户名都是hadoop,所以可以用ssh hadoop1代替 ssh hadoop@hadoop1.如果hadoop1这台主机没有hadoop这个用户,那么ssh hadoop1就无法使用。

最后:

hadoop@hadoop1代替ssh hadoop1,就没有必要让hadoop每台自己的用户名一样。这样想是不对的。因为ssh远程无密码登入可以用ssh hadoop@hadoop1。但是hadoop内部是不会这样智能处理的。所以在配置hadoop集群时,要把所有机子的用户名设置一样。