文 / vincentzhhtml
原文鏈接:http://www.cnblogs.com/vincentzh/p/6034187.htmlnode
這裏寫點 Hadoop2.6.0集羣的安裝和簡單配置,一方面是爲本身學習的過程作以記錄,另外一方面但願也能幫助到和LZ同樣的Hadoop初學者,去搭建本身的學習和練習操做環境,後期的 MapReduce 開發環境的配置和 MapReduce 程序開發會慢慢更新出來,LZ也是邊學習邊記錄更新博客,路人若有問題歡迎提出來一塊兒探討解決,不足的地方但願路人多指教,共勉! web
本文主要詳述配置 Hadoop 集羣,默認路人已經掌握了 Hadoop 單機/僞分佈式的配置,不然請查閱 Hadoop2.6.0安裝 — 單機/僞分佈。單機/僞分佈式的配置是基礎,集羣的配置也不過是再單機/僞分佈的基礎上橫向擴展節點而已,另外在開發的過程當中,也是單機/僞分佈都要去用,或者和集羣之間相互切換進行調試和運行代碼。vim
環境的準備和上篇(Hadoop2.6.0安裝 — 單機/僞分佈)的環境一致,由於LZ也是在一臺電腦上搞的虛擬機學習的,Virtual Box虛擬機下Ubuntu14.04 64位系統,Hadoop版本就不用再囉嗦了吧,題目上寫清楚了。此處集羣包含了3個節點(機器),其中一個作 Master 節點(NameNode),其餘兩臺機器做爲 Slave 節點(DataNode)。網絡
OK,既然集羣有三個節點,須要先將三個虛擬環境準備好,才能開始集羣的配置,整個流程以下:app
VirtualBox須要爲三臺機器配置網絡,以保證集羣中的全部節點之間能夠互相通訊,須要更改網絡鏈接方式爲橋接(Bridge)模式,才能實現虛擬機之間的網絡互聯,同時須要確保各節點之間的Mac地址不一樣。VirtualBox虛擬機幾種網絡鏈接方式的異同能夠去這裏查看。eclipse
爲方便區分各個節點,能夠去修改下各個節點的主機名(直接改成你可以辨識的主機名)。ssh
1 $sudo vim /etc/hostname
此處使用了一個Master節點,兩個Slave節點,須要在hosts文件中添加上節點的與IP的映射關係(全部節點都須要修改,節點直接用SSH直接鏈接的時候能夠直接使用主機名鏈接)。webapp
1 $sudo vi /etc/hosts
測試網絡鏈接。全部節點之間的鏈接都須要逐個測試,以保證全部節點直接可以互聯互通。分佈式
1 $ping Slave0 -c 3
這個操做是要讓 Master 節點能夠無密碼 SSH 登錄到各個 Slave 節點上。
首先生成 Master 節點的公匙,在 Master 節點的終端中執行(由於改過主機名,因此還須要刪掉原有的再從新生成一次):
$cd ~/.ssh # 若是沒有該目錄,先執行一次ssh localhost,生成.ssh目錄 $rm ./id_rsa* # 刪除以前生成的公匙(若是有) $ssh-keygen -t rsa # 一直按回車就能夠
$cat ./id_rsa.pub >> ./authorized_keys
在 Master 節點將上公匙傳輸到 Slave0 和 Slave1 節點:
$scp ~/.ssh/id_rsa.pub hadoop@Slave0:/home/hadoop/
$scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/
將Master節點的公鑰傳輸到Slave節點後,須要分別在兩個節點上將Master節點傳輸過來的公鑰加入受權。這樣,在 Master 節點上就能夠無密碼 SSH 到各個 Slave 節點了,可在 Master 節點上執行以下命令進行檢驗,以下圖所示:
配置好 Hadoop 相關的全部環境變量,具體配置在這裏,一樣若是爲了方便操做 DataNode,能夠將 Slave 節點上Hadoop安裝目錄下的 /sbin 和 /bin 都添加到 $PATH 環境變量中。
集羣/分佈式模式須要修改 /usr/local/hadoop/etc/hadoop 中的5個配置文件,更多設置項可點擊查看官方說明,這裏僅設置了正常啓動所必須的設置項: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。(比僞分佈多了一個slaves文件)
1. slaves文件,將做爲 DataNode 的主機名寫入該文件,每行一個,默認爲 localhost,因此在僞分佈式配置時,節點即做爲 NameNode 也做爲 DataNode。分佈式配置能夠保留 localhost,也能夠刪掉,讓 Master 節點僅做爲 NameNode 使用。LZ直接將 Slave0 和 Slave1 都加入其中。
2. core-site.xml(此處須要主義 fs.defaultFS 屬性,LZ在用window上的eclipse配置開發環境的時候一直配置不成功,但將 Master 改成具體IP地址以後沒問題,這裏將在開發環境配置的時候詳述)
1 <configuration> 2 <property> 3 <name>fs.defaultFS</name> 4 <value>hdfs://Master:9000</value> 5 </property> 6 <property> 7 <name>hadoop.tmp.dir</name> 8 <value>file:/usr/local/hadoop/tmp</value> 9 <description>Abase for other temporary directories.</description> 10 </property> 11 </configuration>
3. hdfs-site.xml,dfs.replication 通常設爲 3,但咱們只有兩個 Slave 節點,因此 dfs.replication 的值仍是設爲 2:
1 <configuration> 2 <property> 3 <name>dfs.namenode.secondary.http-address</name> 4 <value>Master:50090</value> 5 </property> 6 <property> 7 <name>dfs.replication</name> 8 <value>1</value> 9 </property> 10 <property> 11 <name>dfs.namenode.name.dir</name> 12 <value>file:/usr/local/hadoop/tmp/dfs/name</value> 13 </property> 14 <property> 15 <name>dfs.datanode.data.dir</name> 16 <value>file:/usr/local/hadoop/tmp/dfs/data</value> 17 </property> 18 </configuration>
4. mapred-site.xml(須要先重命名,默認文件名爲 mapred-site.xml.template,由於默認狀況只配置HDFS),而後配置修改以下:
1 <configuration> 2 <property> 3 <name>mapreduce.framework.name</name> 4 <value>yarn</value> 5 </property> 6 <property> 7 <name>mapreduce.jobhistory.address</name> 8 <value>Master:10020</value> 9 </property> 10 <property> 11 <name>mapreduce.jobhistory.webapp.address</name> 12 <value>Master:19888</value> 13 </property> 14 </configuration>
5. yarn-site.xml
1 <configuration> 2 <property> 3 <name>yarn.resourcemanager.hostname</name> 4 <value>Master</value> 5 </property> 6 <property> 7 <name>yarn.nodemanager.aux-services</name> 8 <value>mapreduce_shuffle</value> 9 </property> 10 </configuration>
配置好後,將 Master 上的 /usr/local/hadoop 文件夾複製到各個節點上。
注:若是以前在Master節點上啓動過Hadoop,須要在copy以前先刪除hadoop目錄下的 tmp 文件和 logs下的文件。在 Master 節點上執行:
1 $cd /usr/local 2 $sudo rm -r ./hadoop/tmp # 刪除 Hadoop 臨時文件 3 $sudo rm -r ./hadoop/logs/* # 刪除日誌文件 4 $tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先壓縮再複製 5 $cd ~ 6 $scp ./hadoop.master.tar.gz Slave0:/home/hadoop
copy結束後,在Slave0和Slave1節點上直接將copy過來的目錄解壓便可(Master節點須要和Slave節點有相同的配置)。
1 $sudo rm -r /usr/local/hadoop # 刪掉舊的(若是存在) 2 $sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local 3 $sudo chown -R hadoop /usr/local/hadoop
首次啓動須要先在 Master 節點執行 NameNode 的格式化,以後的啓動不須要再去進行:
1 $hdfs namenode -format
逐個啓動全部守護進程,並在各個節點經過jps查看全部守護進程啓動狀況。
1 $start-dfs.sh 2 $start-yarn.sh 3 $mr-jobhistory-daemon.sh start historyserve
Master節點
Slave0節點
Slave節點
要確保全部的守護進程都可以正常啓動。另外還須要在 Master 節點上經過命令 hdfs dfsadmin -report
查看 DataNode 是否正常啓動,若是 Live datanodes 不爲 0 ,則說明集羣啓動成功。例如我這邊一共有 2 個 Datanodes:
關閉集羣一樣也是在Master節點上執行
1 $stop-yarn.sh 2 $stop-dfs.sh 3 $mr-jobhistory-daemon.sh stop historyserver
若是有任何節點沒法啓動或啓動不正常,須要在各自的 logs 文件中查找啓動日誌,逐個排查問題緣由。常見的緣由以下: