前面我們已經學習瞭如何在僞分佈式的模式下運行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,啓動便可