基于Ubuntu 12.04+Hadoop1.2.0 的Hadoop集群搭建
(一) 环境准备
首先准备5台电脑。我这里使用的是OpenStack虚拟出来的五台电脑。每个实例安装的系统是Ubuntu 12.04.2 LTS,虚拟配置如下:
相关阅读:
(二) 修改机器名
打开/etc/hostname文件;
sudo vi/etc/hostname
分别改为hadoop1、hadoop2和hadoop3等等
(三) 域名和ip配置
设置的IP分别是:
192.168.10.1 hadoop1
192.168.10.2 hadoop2
192.168.10.3 hadoop3
192.168.10.4 hadoop4
192.168.10.5 hadoop5
然后使用vi/etc/hosts修改各个主机的/etc/hosts中的内容,将上边的内容编缉进去。注意:
(1)所有节点都需要配置成上述内容。如果不配置,此后的工作将使用IP操作,比较繁琐。扩展性比较差。
(2)需要使用root权限。如果没有root权限,可以使用:sudovi /etc/hosts命令进入编辑。
(四) 创建用户,分配权限
(1)先创建hadoop用户组:sudo addgrouphadoop
(2)然后创建用户hadoop:sudo adduser-ingroup hadoop hadoop
注:
(i)当你没有root权限的时候,所有的命令可以加上sudo前缀。
(ii)在CentOS 和 redhat下直接创建用户就行,会自动生成相关的用户组和相关文件,而ubuntu下直接创建用户,创建的用户没有根目录。
(3)给hadoop用户添加权限,打开/etc/sudoers文件;
sudo vi /etc/sudoers
按回车键后就会打开/etc/sudoers文件了,给hadoop用户赋予root用户同样的权限。
在root ALL=(ALL:ALL) ALL下添加下面的内容:
hadoop ALL=(ALL:ALL) ALL
注意:
(i)千万不要写错了。这个文件一旦修改错误,后果严重。这里创建的用户名也可以不是hadoop,比如ubuntu等都可以。ubuntu系统会在/home目录下生成一个以用户名命名的文件夹。
(ii)所有虚拟机上,都必须使用相同的用户名。
(iii)如果没有权限修改/etc/sudoers。可以输入sudovisudo 即可,此命令直接修改该文件,按照提示修改保存和推出。
(五) 本机(hadoop1)和子节点(son..)安装ssh服务
主要为ubuntu安装,centos和redhat系统自带。ubuntu下:
sudo apt-get installssh openssh-server
(六) 建立ssh无密码登录环境
做这一步之前首先建议所有的机子全部转换为hadoop用户,以防出现权限问题的干扰。
所有机器执行一下操作:
(1)ssh生成密钥有rsa和dsa两种生成方式,默认情况下采用rsa方式。
创建ssh-key,这里我们采用rsa方式;
ssh-keygen -t rsa -P ""
(注:回车后会在~/.ssh/下生成两个文件:id_rsa和id_rsa.pub这两个文件是成对出现的)
(2)切换到~/.ssh/目录下,然后将id_rsa.pub追加到authorized_keys授权文件中,开始是没有authorized_keys文件的;
cd ~/.ssh
cat id_rsa.pub>> authorized_keys
(3)用root用户登录服务器修改SSH配置文件"/etc/ssh/sshd_config"的下列内容。
RSAAuthenticationyes
PubkeyAuthenticationyes
AuthorizedKeysFile %h/.ssh/authorized_keys
设置完之后记得重启SSH服务,才能使刚才设置有效。(centos里的命令:service sshd restart)但这里是ubuntu里。输入命令:
/etc/init.d/sshrestart
退出root登录,使用hadoop普通用户验证是否成功。
ssh localhost。
如果无错误提示,本地无密码登录就配置成功!
(七) 配置集群无密码登录
首先配置Slave节点登录MASTER比较方便,即hadoop2~hadoop5实现无密码访问Master节点。
以hadoop2为例子:
(1) 远程复制文件"id_rsa.pub",目标位置是主机hadoop1的用户为"hadoop"的"/home/hadoop/":
scp~/.ssh/id_rsa.pub hadoop@hadoop1:~/
因为并没有建立起无密码连接,所以在连接时,仍然要提示输入输入Hadoop1服务器用户hadoop的密码。为了确保确实已经把文件传过去了,登录Hadoop1查看"/home/hadoop/"下是否存在这个文件。
(2) 把刚复制来的Hadoop2的公钥追加到Hadoop1 的授权文件"authorized_keys"中去。
cat~/id_rsa.pub >> ~/.ssh/authorized_keys
必要的话,使用下面命令进行追加并修改"authorized_keys"文件权限:
chmod 600~/.ssh/authorized_keys
记得把"/home/hadoop/"目录下的"id_rsa.pub"文件删除掉。
rm –r~/id_rsa.pub
(3) 重复上面的步骤把剩余的Slave服务器(hadoop3~hadoop5)进行配置。这样,我们就完成了"配置Slave无密码登录Master".
(4) 用hadoop用户登录到MASTER节点,就是主机hadoop1。输入命令:
scpauthorized_keys hadoop@hadoop2:~/.ssh/
分别修改命令中的hadoop2为hadoop3到hadoop5并执行。此命令是复制主节点authorized_keys到其余各个节点的.ssh目录。
在hadoop1主机,登录其余各个节点。输入命令:
ssh hadoop2
如果登录失败。可能尝试一下几个方法:
a) 删除各个节点的known_hosts,输入命令:rm~/.ssh/known_hosts。再连接看看。
b) 如果出现一下错误提示,注意红色提示。那我们可以按照提示,输入命令,比如:
ssh-keygen -f"/home/ubuntu/.ssh/known_hosts" -R hadoop2
此命令的hadoop2,就是连接目标,如果提示给的是 ip地址,就要输入ip地址。
c) 其实,只要各个节点曾经连接成功就可以。在hadoop运行过程中,可以使用hadoop-daemon.sh start datanode 等命令动态的将当前节点加入到集群中。