1. 程式人生 > >Hadoop2.6.0安裝 — 叢集

Hadoop2.6.0安裝 — 叢集

這裡寫點 Hadoop2.6.0叢集的安裝和簡單配置,一方面是為自己學習的過程做以記錄,另一方面希望也能幫助到和LZ一樣的Hadoop初學者,去搭建自己的學習和練習操作環境,後期的 MapReduce 開發環境的配置和 MapReduce 程式開發會慢慢更新出來,LZ也是邊學習邊記錄更新部落格,路人如有問題歡迎提出來一起探討解決,不足的地方希望路人多指教,共勉! 

目錄

  1. 環境準備
  2. 網路配置
  3. 配置SSH登陸
  4. 配置環境變數
  5. 配置叢集/分散式
  6. 啟動叢集/分散式
  7. 問題排查

  本文主要詳述配置 Hadoop 叢集,預設路人已經掌握了 Hadoop 單機/偽分散式的配置,否則請查閱 

Hadoop2.6.0安裝 — 單機/偽分佈。單機/偽分散式的配置是基礎,叢集的配置也不過是再單機/偽分佈的基礎上橫向擴充套件節點而已,另外在開發的過程中,也是單機/偽分佈都要去用,或者和叢集之間相互切換進行除錯和執行程式碼。

環境準備

環境的準備和上篇(Hadoop2.6.0安裝 — 單機/偽分佈)的環境一致,因為LZ也是在一臺電腦上搞的虛擬機器學習的,Virtual Box虛擬機器下Ubuntu14.04 64位系統,Hadoop版本就不用再囉嗦了吧,題目上寫清楚了。此處叢集包含了3個節點(機器),其中一個做 Master 節點(NameNode),其他兩臺機器作為 Slave 節點(DataNode)。

OK,既然叢集有三個節點,需要先將三個虛擬環境準備好,才能開始叢集的配置,整個流程如下:

  1. 三臺機器都準備好 Linux 環境,分別配置 hadoop 使用者,安裝 SSH server、配置 Java 環境;
  2. 確定一臺機器作為 Master 節點(虛擬環境隨便指定一個都行啦,但生產環境可要用最牛逼的機器來做哈,畢竟 Master 躺了比較麻煩);
  3. 在確定的 Master 節點上安裝 Hadoop,並完成叢集配置;
  4. 將 Master 節點上 Hadoop 的安裝目錄直接 copy 到所有的 Salve 節點即可;
  5. 在 Master 節點啟動叢集。

網路配置

VirtualBox需要為三臺機器配置網路,以保證叢集中的所有節點之間可以互相通訊,需要更改網路連線方式為橋接(Bridge)模式,才能實現虛擬機器之間的網路互聯,同時需要確保各節點之間的Mac地址不同。VirtualBox虛擬機器幾種網路連線方式的異同可以去這裡檢視。

為方便區分各個節點,可以去修改下各個節點的主機名(直接改為你能夠辨識的主機名)。

1 $sudo vim /etc/hostname

 

 

 此處使用了一個Master節點,兩個Slave節點,需要在hosts檔案中新增上節點的與IP的對映關係(所有節點都需要修改,節點直接用SSH直接連線的時候可以直接使用主機名連線)。

1 $sudo vi /etc/hosts

 

 

測試網路連線。所有節點之間的連線都需要逐個測試,以保證所有節點直接能夠互聯互通。

1 $ping Slave0 -c 3

 

配置SSH登陸

這個操作是要讓 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 [email protected]:/home/hadoop/
$scp ~/.ssh/id_rsa.pub [email protected]:/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