雖然和GOOGLE的云計算框架相差很遠,但是基本能夠實現云框架還是可以的,我選擇了hadoop,最近這個框架在網絡上炒的很火,一部分IT高手加入了開發隊列,本人也不例外(不過我不是高手,只是一個很普通的系統架構師而已)。
好了廢話少說,直接切入主題吧
首先使用了五臺機器來實現hadoop框架。
IP依次為:
192.168.1.199(master)
192.168.1.200(slave)
192.168.1.201(slave)
192.168.1.202(slave)
192.168.1.203(slave)
以下是簡單結構:
首先登錄119服務器
[root@localhost ~]# uname -ar
Linux localhost 2.6.18-92.el5 #1 SMP Tue Jun 10 18:49:47 EDT 2008 i686 i686 i386 GNU/Linux
保證計算機名的全局唯一性:
hadoop1. test.com -----192.168.1.203
hadoop2. test.com -----192.168.1.202
hadoop3. test.com -----192.168.1.201
hadoop4. test.com -----192.168.1.200
hadoop5. test.com -----192.168.1.199
設置hostname
Hostname hadoop5.test.com
[root@localhost ~]# vi /etc/hosts
127.0.0.1 localhost.localdomain localhos
192.168.1.199 hadoop5.test.com
[root@localhost ~]# uname -ar
Linux hadoop5.test.com 2.6.18-92.el5 #1 SMP Tue Jun 10 18:49:47 EDT 2008 i686 i686 i386 GNU/Linux
[root@localhost ~]# vi /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
#HOSTNAME=localhost.localdomain
HOSTNAME=hadoop5.test.com
GATEWAY=192.168.1.254
OK了,已經修改過來了,其他機器也同樣的設置。
為了方便,關閉防火墻:(5臺服務器都設置)
[root@hadoop5 ~]# service iptables stop
[root@hadoop5 ~]# chkconfig iptables off
方便起見,創建hadoop用戶
[root@hadoop5 ~]# useradd hadoop
下載JDK最新版:
http://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/VerifyItem-Start/jdk-6u19-linux-i586.bin?BundledLineItemUUID=YTBIBe.nt_gAAAEnpTtSWvsx&OrderID=Ga5IBe.n.w4AAAEnmjtSWvsx&ProductID=8ihIBe.nLjEAAAEnh3cZVnKo&FileName=/jdk-6u19-linux-i586.bin
全部放入/home/hadoop目錄。
[root@localhost local]# cp jdk-6u19-linux-i586.bin /usr/local/
[root@localhost local]# cd /usr/local/
[root@localhost local]# chmod +x ./jdk-6u19-linux-i586.bin
[root@localhost local]#./jdk-6u19-linux-i586.bin #執行
一直按回車即可,然后輸入yes回車。
[root@localhost local]# rm -rf jdk-6u19-linux-i586.bin
[root@localhost local]# cd /home/hadoop/
[root@localhost hadoop]# vi /etc/profile
在最下面加入:
export JAVA_HOME=/usr/local/jdk1.6.0_19
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH
export HADOOP_HOME=/home/hadoop/hadoop-0.20.2
export PATH=$PATH:$HADOOP_HOME/bin
[root@localhost hadoop]# source /etc/profile
現在我們修改hadoop的配置文件:0.20以上的配置和以前的配置有些是不同的,我們 以0.20.2為例做東西
[root@localhost conf]# pwd
/home/hadoop/hadoop-0.20.2/conf
[root@localhost conf]# vi core-site.xml
[root@localhost conf]# echo "export JAVA_HOME=/usr/local/jdk1.6.0_19" >> hadoop-env.sh
[root@localhost conf]# vi hdfs-site.xml
[root@localhost conf]# vi mapred-site.xml

添加slave地址
vim /home/hadoop/hadoop-0.20.2/conf/slaves
我的內容是:
192.168.1.200
192.168.1.201
192.168.1.202
192.168.1.203
也可以用一下方法添加
[root@localhost conf]# echo 192.168.1.199 > masters
[root@localhost conf]# echo 192.168.1.200 > slaves
[root@localhost conf]# echo 192.168.1.201 >> slaves
[root@localhost conf]# echo 192.168.1.202 >> slaves
[root@localhost conf]# echo 192.168.1.203 >> slaves
現在我們做無密碼的ssh登錄的設置:
建立Master到每一臺Slave的SSH受信證書。由于Master將會通過SSH啟動所有Slave的 Hadoop,所以需要建立單向或者雙向證書保證命令執行時不需要再輸入密碼。在Master和所有的Slave機器上執行:ssh-keygen -t rsa
。
執行此命令的時候,看到提示只需要回車。然 后就會在/root/.ssh/
下面產生id_rsa.pub
的證書文件,通過scp將Master機器上的這個文件拷貝 到Slave上(記得修改名稱),例如:
Scp root/.ssh/id_rsa.pub root@192.168.1.200:/root/.ssh/authorized_keys
,建立authorized_keys
文件即可,可以打開這個文件看看,也就是rsa的公 鑰作為key,user@IP作為value。此時可以試驗一下,從master ssh到slave已經不需要密碼了。由slave反向建立也是同樣。為什么要反向呢?其實如果一直都是Master啟動和關閉的話那么沒有必要建立反 向,只是如果想在Slave也可以關閉Hadoop就需要建立反向。
[root@localhost .ssh]# scp /root/.ssh/id_rsa.pub root@192.168.1.200:/root/.ssh/authorized_keys
root@192.168.1.200's password:
id_rsa.pub 100% 403 0.4KB/s 00:00
[root@localhost .ssh]# scp /root/.ssh/id_rsa.pub root@192.168.1.201:/root/.ssh/authorized_keys
root@192.168.1.201's password:
id_rsa.pub 100% 403 0.4KB/s 00:00
[root@localhost .ssh]# scp /root/.ssh/id_rsa.pub root@192.168.1.202:/root/.ssh/uthorized_keys root@192.168.1.202's password:
id_rsa.pub 100% 403 0.4KB/s 00:00
[root@localhost .ssh]# scp /root/.ssh/id_rsa.pub root@192.168.1.203:/root/.ssh/authorized_keys
root@192.168.1.203's password:
id_rsa.pub 100% 403 0.4KB/s 00:00
然后重啟SSHD服務
[root@localhost .ssh]# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
然后每臺服務器上都修改ssh的配置文件:/etc/ssh/sshd_config 把GSSAPIAuthentication的值設置為no
這樣起到加速的作用,具體含義,自己看下ssh手冊。
然后壓縮hadoop文件夾成為一個壓縮包
[root@localhost hadoop]# cd /home/hadoop/
[root@localhost hadoop]# tar zcvf hadoop-0.20.2.tar.gz hadoop-0.20.2
依次傳送到slave服務器上
[root@localhost hadoop]# scp hadoop-0.20.2.tar.gz root@192.168.1.200:/home/hadoop
hadoop-0.20.2.tar.gz 100% 43MB 21.3MB/s 00:02
[root@localhost hadoop]# scp hadoop-0.20.2.tar.gz root@192.168.1.201:/home/hadoop
hadoop-0.20.2.tar.gz 100% 43MB 14.2MB/s 00:03
[root@localhost hadoop]# scp hadoop-0.20.2.tar.gz root@192.168.1.203:/home/hadoop
hadoop-0.20.2.tar.gz 100% 43MB 21.3MB/s 00:02
[root@localhost hadoop]# scp hadoop-0.20.2.tar.gz root@192.168.1.202:/home/hadoop
hadoop-0.20.2.tar.gz
然后依次登錄slave服務器并解壓hadoop文件
tar zxvf hadoop-0.20.2.tar.gz
好,我們現在可以在master上執行如下命令:
[root@localhost hadoop]# cd /home/hadoop/hadoop-0.20.2/bin/
報了一堆錯誤
總之意思就是說沒有jdk,后來仔細想想 ,確實忘記在slave上安裝jdk了。
然后按照master上安裝jdk的步驟依次在slave上重復一次。
所有機器都安裝完JDK之后,繼續到199主服務器上執行
[root@localhost bin]# ./start-all.sh
所有服務器執行成功.
查看master/slave的服務狀態了。
不過有一點要注意一下,iptables可能限定了某些端口,所有方便起見,還是要關閉master/slave服務器上的iptables的。
剩下就是開發事宜,我們下次再講,希望解占輝的文章對您有幫助,謝謝!
參考文獻: