配置hadoop集群时,ssh无密码登陆设置(各个主机的用户名需要一样)

目标:

在配置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     (进入用户目录下的隐藏文件.ssh)
  2. ssh-keygen -t rsa   (用rsa生成密钥)
  3. cp id_rsa.pub authorized_keys   (把公钥复制一份,并改名为authorized_keys,这步执行完,应该ssh localhost可以无密码登录本机了,可能第一次要密码)
  4. scp authorized_keyshadoop@hadoop1:/home/hadoop/.ssh  (把重命名后的公钥通过ssh提供的远程复制文件复制到从机qiuchenl1上面)
  5. chmod 600 authorized_keys    (更改公钥的权限,也需要在从机qiuchenl1中执行同样代码)
  6. ssh hadoop1  (可以远程无密码登录qiuchenl1这台机子了,注意是ssh不是sudo ssh。第一次需要密码,以后不再需要密码)

注意:

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

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

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

下面回归正题,ssh远程登录其他机子,是登入那个机子的某个用户,所以在上面的第四步 我是把公钥文件拷贝到hadoop1主机下的hadoop用户,所以我只能远程控制该用户。再看上面第6步,要登录hadoop1hadoop用户,命令应该是ssh hadoop@hadoop1,为什么是ssh hadoop1就可以呢。因为ssh hadoop1会默认以当前主机的用户名(也就是hadoop0hadoop)来远程登录。因为hadoop0hadoop1两个机子的用户名都是hadoop,所以可以用ssh hadoop1代替 ssh hadoop@hadoop1.如果hadoop1这台主机没有hadoop这个用户,那么ssh hadoop1就无法使用。


最后:

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

你可能感兴趣的:(centos,hadoop)