1. 程式人生 > >分散式系統Hadoop的搭建

分散式系統Hadoop的搭建

  1. 實驗目標

搭建一個Hadoop系統,包含分散式檔案系統HDFS、分散式計算框架MapReduce。

  1. 實驗原理

Hadoop框架透明地為應用提供可靠性和資料移動。它實現了名為MapReduce的程式設計正規化:應用程式被分割成許多小部分,而每個部分都能在叢集中的任意節點上執行或重新執行。此外,Hadoop還提供了分散式檔案系統,用以儲存所有計算節點的資料,這為整個叢集帶來了非常高的頻寬。MapReduce和分散式檔案系統的設計,使得整個框架能夠自動處理節點故障。它使應用程式與成千上萬的獨立計算的計算機和PB級的資料連線起來。

HDFS採用master/slave架構。一個HDFS叢集是由一個Namenode和一定數目的Datanodes組成。Namenode是一箇中心伺服器,負責管理檔案系統的名字空間(namespace)以及客戶端對檔案的訪問。叢集中的Datanode一般是一個節點一個,負責管理它所在節點上的儲存。HDFS暴露了檔案系統的名字空間,使用者能夠以檔案的形式在上面儲存資料。從內部看,一個檔案其實被分成一個或多個數據塊,這些塊儲存在一組Datanode上。Namenode執行檔案系統的名字空間操作,比如開啟、關閉、重新命名檔案或目錄。它也負責確定資料塊到具體Datanode節點的對映。Datanode負責處理檔案系統客戶端的讀寫請求。在Namenode的統一排程下進行資料塊的建立、刪除和複製。

Namenode和Datanode被設計成可以在普通的商用機器上執行。這些機器一般執行著GNU/Linux作業系統(OS)。HDFS採用Java語言開發,因此任何支援Java的機器都可以部署Namenode或Datanode。由於採用了可移植性極強的Java語言,使得HDFS可以部署到多種型別的機器上。一個典型的部署場景是一臺機器上只執行一個Namenode例項,而叢集中的其它機器分別執行一個Datanode例項。這種架構並不排斥在一臺機器上執行多個Datanode,只不過這樣的情況比較少見。

叢集中單一Namenode的結構大大簡化了系統的架構。Namenode是所有HDFS元資料的仲裁者和管理者,這樣,使用者資料永遠不會流過Namenode。

HDFS支援傳統的層次型檔案組織結構。使用者或者應用程式可以建立目錄,然後將檔案儲存在這些目錄裡。檔案系統名字空間的層次結構和大多數現有的檔案系統類似:使用者可以建立、刪除、移動或重新命名檔案。當前,HDFS不支援使用者磁碟配額和訪問許可權控制,也不

支援硬連結和軟連結。但是HDFS架構並不妨礙實現這些特性。

Namenode負責維護檔案系統的名字空間,任何對檔案系統名字空間或屬性的修改都將被Namenode記錄下來。應用程式可以設定HDFS儲存的檔案的副本數目。檔案副本的數目稱為檔案的副本系數,這個資訊也是由Namenode儲存的。

Yarn是Hadoop叢集的資源管理系統。Hadoop2.0對MapReduce框架做了徹底的設計重構,Hadoop2.0中的MapReduce稱為MRv2或者Yarn。

重構根本的思想是將 JobTracker 兩個主要的功能分離成單獨的元件,這兩個功能是資源管理和任務排程 / 監控。新的資源管理器全域性管理所有應用程式計算資源的分配,每一個應用的 ApplicationMaster 負責相應的排程和協調。一個應用程式無非是一個單獨的傳統的 MapReduce 任務或者是一個 DAG( 有向無環圖 ) 任務。ResourceManager 和每一臺機器的節點管理伺服器能夠管理使用者在那臺機器上的程序並能對計算進行組織。

事實上,每一個應用的 ApplicationMaster 是一個詳細的框架庫,它結合從 ResourceManager 獲得的資源和 NodeManager 協同工作來執行和監控任務。

上圖中 ResourceManager 支援分層級的應用佇列,這些佇列享有叢集一定比例的資源。從某種意義上講它就是一個純粹的排程器,它在執行過程中不對應用進行監控和狀態跟蹤。同樣,它也不能重啟因應用失敗或者硬體錯誤而執行失敗的任務。

ResourceManager 是基於應用程式對資源的需求進行排程的 ; 每一個應用程式需要不同型別的資源因此就需要不同的容器。資源包括:記憶體,CPU,磁碟,網路等等。可以看出,這同現 Mapreduce 固定型別的資源使用模型有顯著區別,它給叢集的使用帶來負面的影響。資源管理器提供一個排程策略的外掛,它負責將叢集資源分配給多個佇列和應用程式。排程外掛可以基於現有的能力排程和公平排程模型。

上圖中 NodeManager 是每一臺機器框架的代理,是執行應用程式的容器,監控應用程式的資源使用情況 (CPU,記憶體,硬碟,網路 ) 並且向排程器彙報。

每一個應用的 ApplicationMaster 的職責有:向排程器索要適當的資源容器,執行任務,跟蹤應用程式的狀態和監控它們的程序,處理任務的失敗原因。

  1. 實驗環境準備

三臺本地Vmware虛擬機器,均裝有CentOS 7.2作業系統和Oracle JDK 1.8。各機器配置如下表:

名稱

IP

執行記憶體

儲存

Cores

啟動程序

 

node1

 

172.16.86.130

 

1GB

 

<100GB

 

4

NameNode

ResourceManager

JobHistory

SecondaryNamenode

node2

172.16.86.133

1GB

<100GB

4

DataManager

NodeManager

node3

172.16.86.134

1GB

<100GB

4

DataManager

NodeManager

    

  1. 實驗過程

3.1下載

下載hadoop的binary壓縮包,下載連結:https://hadoop.apache.org/releases.html。並傳到三臺虛擬機器上。本實驗使用的hadoop-2.9.2。

3.2安裝

在每個節點上,解壓hadoop的安裝包到安裝目錄即可。

3.3配置

3.3.1 編輯/etc/hosts,新增如下內容

172.16.86.130 node1

172.16.86.133 node2

172.16.86.134 node3

3.3.2配置從node1到其他節點的無密碼登陸

3.3.3進入安裝目錄,編輯etc/Hadoop/hadoop-env.sh,修改JAVA_HOME為JDK安裝目錄,如下圖:

在每個節點上都進行這步操作。

3.3.4 配置core-site.xml

進入hadoop安裝目錄,編輯etc/hadoop/core-site.xml檔案,編輯結果如下圖所示:

在每個節點上都進行這步操作。

3.3.5 配置hdfs-site.xml

進入hadoop安裝目錄,編輯etc/hadoop/hdfs-site.xml,編輯結果如下圖所示:

在每個節點上都進行這步操作。

3.3.6 配置yarn-site.xml

進入hadoop安裝目錄,編輯etc/hadoop/yarn-site.xml,編輯結果如下圖所示:

在每個節點上都進行這步操作。

3.3.7 配置mapreduce-site.xml

進入hadoop安裝目錄,編輯etc/Hadoop/mapreduce-site.xml,編輯結果如下圖所示:

在每個節點上都進行這步操作。

3.4啟動

3.4.1 格式化hdfs

在hadoop的安裝目錄,執行bin/hdfs namenode -format,格式化hdfs,結果如下圖:

3.4.2 啟動hdfs

在hadoop的安裝目錄下,執行sbin/start-hdfs.sh,啟動hdfs。

3.4.3 啟動yarn

在hadoop的安裝目錄下,執行sbin/start-yarn.sh,啟動yarn。

3.4.4 啟動JobHistory Server

在hadoop的安裝目錄下。執行sbin/mr-jobhistory-daemon.sh start,啟動job history server。

3.5驗證

3.5.1 驗證hdfs

3.5.2 驗證yarn

3.5.3 驗證job history server