前面我们已经学习了如何在伪分布式的模式下运行hadoop,下面我们介绍一下如何进行hadoop集群的安装机器配置:
1.这里需要克隆3份虚拟机,一台master, 两台slaves,虚拟机怎么克隆就不说了,自己百度
2.对各个服务器进行网络配置,这个可以看第一讲
3.修改机器名字:
每台计算机都执行以下下面的代码:
[root@hadoop0 hadoop]# vim /etc/sysconfig/network
内容如下:
NETWORKING=yes
HOSTNAME=hadoop0
然后把HOSTNAME分别改为:hadoop0, hadoop1, hadoop2,之后都重启。
4.添加hosts配置:
三台计算机分别执行代码:
[root@hadoop0 hadoop]# vim /etc/hosts
添加下面的hosts信息:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.21.15.189 hadoop0
172.21.15.30 hadoop1
172.21.15.47 hadoop2
添加下面的三行,注意这里添加的是你自己的机器的ip,而不是我上面的ip,三台机器都添加
5.关闭防火墙(如果已经关了请忽略这一步):
[root@hadoop0 hadoop]# service iptables stop
6.修改hadoop里面的配置文件的服务器名称,core-site.xml
和mapred-site.xml
,全都改为指向主服务器,也就是下面的样子:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop0:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
</configuration>
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hadoop0:9001</value>
</property>
</configuration>
6.设置ssh相互免密码登陆:
每台服务器上都执行以下下面的操作:
[root@hadoop0 conf]# cd ~/.ssh
删除里面的文件:
[root@hadoop0 .ssh]# rm -rf *
重新生成秘钥:
[root@hadoop0 .ssh]# ssh-keygen -t dsa
输出到授权文件中:
[root@hadoop0 .ssh]# cat id_dsa.pub >> authorized.keys
每一台服务器完成上面步骤后,接下来在hadoop0和hadoop1上进行如下的操作:
ssh-copy-id -i /root/.ssh/id_dsa.pub hadoop2
这样hadoop2上面就有了三台服务器的ssh密钥了,我们只需要在hadoop2上面执行下面的命令把三台服务的密钥分别复制到hadoop0和hadoop1:
[root@hadoop2 .ssh]# scp /root/.ssh/authorized_keys hadoop0:/root/.ssh/
[root@hadoop2 .ssh]# scp /root/.ssh/authorized_keys hadoop1:/root/.ssh/
这样三台机器就可以免密码登陆了。
7.在hadoop0上修改hadooop的配置文件:
配置从节点:
[root@hadoop0 ~]# vim /usr/local/hadoop/conf/slaves
将原先的内容删掉,添加下面两个从节点:
hadoop1
hadoop2
之前因为我们是在伪分布模式下面的运行的hadoop,我们现在需要删除三台服务器hadoop目录下面的logs和tmp文件夹,不然hadoop会启动不起来:
[root@hadoop2 ~]# cd /usr/local/hadoop
[root@hadoop2 hadoop]# rm -rf logs tmp
8.下面就是在hadoop0上格式化namenode:
[root@hadoop0 hadoop]# hadoop namenode -format
9.下面就可以启动hadoop集群了:在hadoop0上执行如下的命令:
[root@hadoop0 bin]# start-all.sh
[root@hadoop0 bin]# jps
3004 SecondaryNameNode
3175 Jps
3079 JobTracker
[root@hadoop1 conf]# jps
1899 TaskTracker
1969 Jps
1834 DataNode
如果你想把secondNameNode迁移到其他的服务器上,你就需要在hadoop0上配置如下:
[root@hadoop0 conf]# vim /usr/local/hadoop/conf/masters
把里面的内容删掉,改成你所希望的secondnamenode服务器:
比如我改为:
hadoop1
这里我发现了一个问题,就是我的hadoop0的namenode不能启动,解决方法如下:
[root@hadoop0 bin]# vim /usr/local/hadoop/conf/core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop0:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
</configuration>
把tmp目录的位置改到你的用户名下面的tmp文件夹下,重新格式化namenode,启动便可