Hadoop學習筆記(3) java
——分佈式環境搭建 node
前面,咱們已經在單機上把Hadoop運行起來了,但咱們知道Hadoop支持分佈式的,而它的優勢就是在分佈上突出的,因此咱們得搭個環境模擬一下。 linux
在這裏,咱們採用這樣的策略來模擬環境,咱們使用3臺ubuntu機器,1臺爲做主機(master),另外2臺做爲從機(slaver)。同時,這臺主機,咱們就用第一章中搭建好的環境來。 ubuntu
咱們採用與第一章中類似的步驟來操做: 安全
在前面,咱們知道,運行hadoop是在linux上運行的。因此咱們單機就在ubuntu上運行着。因此一樣,2臺從機,一樣採用linux系統。爲了節省資源,本人試驗時用了2臺centOS系統,並且是採用命令行的方式,沒有用圖形方式。 服務器
系統中軟件準備,第一章中咱們準備了subversion ssh ant 和jdk。那在這裏,從機上咱們不要這麼多了,咱們不用再下載、編譯代碼了,從主機上覆制就行。因此在從機上只須要安裝ssh 和jdk這兩個: 網絡
先用 sudo apt-get install ssh這個命令,把SSH安裝起來。 eclipse
注:在centOS中,使用yum install ssh。 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
第1章中咱們瞭解了SSH的功能,在這裏就可真正派用處了。
咱們在master機中,用ssh試一下鏈接node1:
能夠看到,須要輸入密碼纔可以進入。遠程啓動全部從機時,一個個輸入密碼,也不是個好事,得配置下:
這個在第1章中已經描述。這裏就很少述了。結果就是:
爲了實現這個功能,兩個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也安這個方式操做一下。
在第一章配置基礎上,咱們須要增長兩項配置:
在conf文件夾下,找到masters文件,編輯,在裏面輸入master後保存:
在同文件夾下,找到slaves,編輯,在裏面輸入node1 node2後保存:
打開conf下core-site.xml:
裏面的localhost換成master。
打開conf下的marped-site.xml:
一樣,也是裏面的localhost換成master。
前面,在一臺機器上部署時,咱們的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
這樣,再來看:
平衡了。