Hadoop學習筆記(3)
——分布式環境搭建
前面,我們已經在單機上把Hadoop運行起來了,但我們知道Hadoop支持分布式的,而它的優點就是在分布上突出的,所以我們得搭個環境模擬一下。
在這里,我們采用這樣的策略來模擬環境,我們使用3台ubuntu機器,1台為作主機(master),另外2台作為從機(slaver)。同時,這台主機,我們就用第一章中搭建好的環境來。
我們采用與第一章中相似的步驟來操作:
-
運行環境搭建
在前面,我們知道,運行hadoop是在linux上運行的。所以我們單機就在ubuntu上運行着。所以同樣,2台從機,同樣采用linux系統。為了節省資源,本人試驗時用了2台centOS系統,而且是采用命令行的方式,沒有用圖形方式。
系統中軟件准備,第一章中我們准備了subversion ssh ant 和jdk。那在這里,從機上我們不要這么多了,我們不用再下載、編譯代碼了,從主機上復制就行。所以在從機上只需要安裝ssh 和jdk這兩個:
先用 sudo apt-get install ssh這個命令,把SSH安裝起來。
注:在centOS中,使用yum install ssh。
java環境,可以在網上下載一個JDK安裝包,如:jdk-6u24-linux-i586.bin
安裝直接在目錄下運行./jdk-6u24-linux-i586.bin即可。
然后配置jdk目錄:
先進入安裝目錄 cd jdk-6u24-…
然后輸入 PWD 就可以看到java安裝目錄,復制下來:
命令行執行:sudo gedit /etc/profile
在打開的文件里,追加:
export JAVA_HOME=/home/administrator/hadoop/jdk1.6.0_27 //這里要寫安裝目錄
export PATH=${JAVA_HOME}/bin:$PATH
執行source /etc/profile 立即生效
-
網絡配置
要想運行分布式環境,那這3台計算機(虛擬機)肯定是要聯網才行。同時,三台之前也要暢通無阻。
如果直接采用虛擬機,就比較方便了,默在虛擬機中都使用NAT聯網方式即可:
分別進入三個系統,用ifconfig命令,可以查到當前分配過來的IP地址:
如上圖中可以看到是10.0.0.11。
如果發現沒有eth0,也就是說網卡還沒啟用或分配好地址,則可以手動分配:
ifconfig eth0 10.0.0.12 netmask 255.255.255.0 //設置eht0 的IP地址
route add default gw 10.0.0.2 //設置網關
在VMware中,怎么看到網關呢,可以在菜單 編輯->虛擬網絡編輯器 中看到:
網關一定要配置對,否則光IP地址后,機器之前互想ping不通的。
在配置好IP后,可以嘗試ping一下網關和其他機器,看是否能通。
在這里,我們3台機IP為:
主機 master : 10.0.0.10
從機1 salter1 :10.0.0.11
從機2 salter2 :10.0.0.12
有了3台機器的IP地址,我們想,后面在配置中肯定會用到,但為了方便以后IP地址的變動,所以我們還是用另名吧。在window中,我們知道在C:\Windows\System32\driver\etc下,有個host文件,修改后,就可以將IP換成別名了。
在linux中,同樣有這個文件,在/etc/hosts中。所以編輯一下: $vi /etc/hosts:
文件保存后,就可以試一下ping master ping node1來代替IP地址了。
這個操作需要在三個機器上都操作一下。
現在網絡了,為了后面操作,在所有部署運行hadoop的機器上,都必須使用相同的帳號。所以需要在2台從機上創建一個與主機一樣的帳號、密碼:
比如都用zjf帳號: $user add zjf 設置密碼: $passwd zjf 進入該帳號: $su zjf
有可能機器上會有防火牆,影響后面的遠程,所以可以先關一下:
$ service iptables stop
-
配置SSH
第1章中我們了解了SSH的功能,在這里就可真正派用處了。
我們在master機中,用ssh試一下連接node1:
可以看到,需要輸入密碼才能夠進入。遠程啟動所有從機時,一個個輸入密碼,也不是個好事,得配置下:
-
在從機node1中先實現自己登陸自己時不要輸入密碼。
這個在第1章中已經描述。這里就不多述了。結果就是:
-
讓主結點(master)能通過SSH免密碼登錄兩個子結點(slave)
為了實現這個功能,兩個slave結點的公鑰文件中必須要包含主結點的公鑰信息,這樣當master就可以順利安全地訪問這兩個slave結點了。操作過程如下:
$cd ~/.ssh
$scp zjf@master:~/.ssh/id_dsa.pub ./master_dsa.pub
$cat master_dsa.pub >> authorized_keys
好了,配置完后,回到master機器中,再來試一下ssh node1:
OK,成功進入,沒有要輸入密碼。
同樣,把node2也安這個方式操作一下。
-
配置hadoop
在第一章配置基礎上,我們需要增加兩項配置:
在conf文件夾下,找到masters文件,編輯,在里面輸入master后保存:
在同文件夾下,找到slaves,編輯,在里面輸入node1 node2后保存:
打開conf下core-site.xml:
里面的localhost換成master。
打開conf下的marped-site.xml:
同樣,也是里面的localhost換成master。
-
復制hadoop包
前面,在一台機器上部署時,我們的hadoop包是通過SVN下載了源碼,然后再用ant編譯出來的,但在這里,從機上就不用這么麻煩了,我們可以從主機上復制過去。如何復制呢? 遠程登陸我們用SSH,遠程復制就用SCP。在復制前要注意,我們在主機中hadoop存放在什么位置,在從機中也要存放在該位置才行。
比如,在主機中,我們存放於test下,所以在2台node上,都創建一下test文件夾。
然后在主機上執行:scp -r hadoop-0.20.2/ node1:~/test 然后會看到刷屏,表示在復制了。
同樣執行: scp -r hadoop-0.20.2/ node2:~/test
好了,現在兩台從機上也都有了hadoop包了。
-
運行
在主機上,進入hadoop-0.20.2目錄,運行bin/start-all.sh,即可以啟動整個分布式系統了。
然后在主機上運行jps:
在從機上運行jps:
在主服務器上打開 http://localhost:50070,可以看到:
有兩個活動的結點,點進去,可以看到:
點下面的結點可以查看詳細,如果點開頁面打不開,則有可能是機器防火牆阻止了。
可以進入相應機器,執行
$ service iptables stop
來關閉防火牆。
我們可以嘗試上傳一下文件:
$bin/hadoop fs -put ~/Tool/eclipse-SDK-3.7.1-linux-gtk.tar.gz test1.tar.gz
可以看到:
再上傳一下文件:
$bin/hadoop fs -put ~/Tool/eclipse-SDK-3.7.1-linux-gtk.tar.gz test2.tar.gz
可以看到:
但發現不平衡,都跑一台上了。所以可以執行命令
$bin/hadoop balancer -threshold 1
這樣,再來看:
平衡了。