Hadoop完全分散式安裝部署
Hadoop執行模式包括:本地模式、偽分散式模式以及完全分散式模式。我們本次主要完成搭建實際生產環境中比較常用的完全分散式模式,搭建完全分散式模式之前需要對叢集部署進行提前規劃,不要將過多的服務集中到一臺節點上,我們將負責管理工作的namenode和ResourceManager分別部署在兩臺節點上,另外一臺節點上部署SecondaryNamenode,所有節點均承擔Datanode和Nodemanager角色,並且datanode和nodemanager通常存在同一節點上,所有角色儘量做到均衡分配。
叢集部署規劃如表1。
對叢集角色的分配主要依靠配置檔案制定,配置叢集檔案細節如下。
(1)核心配置檔案core-site.xml,該配置檔案屬於Hadoop的全域性配置檔案,我們主要進行配置分散式檔案系統的入口地址NameNode的地址和分散式檔案系統中資料落地到伺服器本地磁碟位置的配置,如下:
[atguigu@hadoop102 hadoop]$ vi core-site.xml <!-- 指定HDFS中NameNode的地址 --> <!—其中hdfs為協議名稱,hadoop102為namenode的節點主機名稱,埠號為9000 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:9000</value> </property> <!-- 指定hadoop執行時產生檔案的儲存目錄,該目錄需要單獨建立 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value> </property>
(2)Hadoop環境配置檔案hadoop-env.sh,在這個配置檔案中我們主要需要制定jdk的路徑JAVA_HOME,避免程式執行中出現JAVA_HOME找不到的異常。
[atguigu@hadoop102 hadoop]$ vi hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
(3) HDFS配置檔案hdfs-site.xml,在這個配置檔案中主要進行配置HDFS檔案系統屬性配置。
[atguigu@hadoop102 hadoop]$ vi hdfs-site.xml <!-- 指定hdfs儲存內容的副本個數 --> <!—hadoop通過檔案的冗餘來確保檔案儲存的可靠性,由於我們有3個datanode節點,所以我們可以將副本數量設定為3 --> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 指定Hadoop輔助名稱節點主機配置 --> <!—SecondaryNameNode節點主要作為NameNode節點的輔助,埠號為50090 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop104:50090</value> </property>
(4)YARN的環境配置檔案yarn-env.sh,同樣將JAVA_HOME路徑配置指明。
[atguigu@hadoop102 hadoop]$ vi yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
(5)關於YARN的配置檔案yarn-site.xml,其中配置YARN的相關引數,主要配置一下兩個引數。
[atguigu@hadoop102 hadoop]$ vi yarn-site.xml
<!-- reducer獲取資料的方式 -->
<!-- yarn.nodemanager.aux-services是NodeManager上執行的附屬服務,其值需要配置成mapreduce_shuffle才可以執行MapReduce程式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
(6)mapreduce的環境配置檔案mapred-env.sh,同樣將JAVA_HOME路徑配置指明。
[atguigu@hadoop102 hadoop]$ vi mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
(7)關於MapReduce的配置檔案mapred-site.xml,主要配置一個引數,指明MapReduce的執行框架為YARN.
[atguigu@hadoop102 hadoop]$ cp mapred-site.xml.template mapred-site.xml
[atguigu@hadoop102 hadoop]$ vi mapred-site.xml
<!—MapReduce計算框架的資源交給YARN來管理 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
(8) 主節點NameNode和ResourceManager的角色在配置檔案中已經做了配置,從節點的角色還需指定,配置檔案slaves就是用來配置Hadoop叢集中各個從節點角色的。如下,對slaves檔案進行修改,即將3臺節點全部指定為從節點,可以啟動DataNode和NodeManager程序。
/opt/module/hadoop-2.7.2/etc/hadoop/slaves
[atguigu@hadoop102 hadoop]$ vi slaves
hadoop102
hadoop103
hadoop104
(9)在叢集上分發配置好的Hadoop配置檔案,這樣3臺節點即享有相同的Hadoop的配置,可準備通過不同的程序啟動命令進行啟動了。
[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-2.7.2/
(10)檢視檔案分發情況
[atguigu@hadoop103 hadoop]$ cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
建立資料目錄
根據core-site.xml中配置的分散式檔案系統最終落地到各個資料節點上的本地磁碟位置資訊/opt/module/hadoop-2.7.2/data/tmp,自行建立該目錄。
[atguigu@hadoop102 hadoop-2.7.2]$ mkdir /opt/module/hadoop-2.7.2/data/tmp
[atguigu@hadoop103 hadoop-2.7.2]$ mkdir /opt/module/hadoop-2.7.2/data/tmp
[atguigu@hadoop104 hadoop-2.7.2]$ mkdir /opt/module/hadoop-2.7.2/data/tmp
啟動Hadoop叢集
(1)如果叢集是第一次啟動,需要格式化NameNode
[atguigu@hadoop102 hadoop-2.7.2]$ hadoop namenode -format
(2)通過start-dfs.sh命令在配置了namenode的節點啟動HDFS,即可同時啟動所有的datanode和SecondaryNameNode節點。
[atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh
[atguigu@hadoop102 hadoop-2.7.2]$ jps
4166 NameNode
4482 Jps
4263 DataNode
[atguigu@hadoop103 hadoop-2.7.2]$ jps
3218 DataNode
3288 Jps
[atguigu@hadoop104 hadoop-2.7.2]$ jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps
(3)通過start-yarn.sh命令啟動yarn,
[atguigu@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh
通過jps命令可在各個節點上檢視程序啟動情況,顯示如下所示即表示啟動成功。
[atguigu@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh
[atguigu@hadoop102 hadoop-2.7.2]$ jps
4166 NameNode
4482 Jps
4263 DataNode
4485 NodeManager
[atguigu@hadoop103 hadoop-2.7.2]$ jps
3218 DataNode
3288 Jps
3290 ResourceManager
3299 NodeManager
[atguigu@hadoop104 hadoop-2.7.2]$ jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps
3389 NodeManager
Web UI檢視叢集是否啟動成功
(1) 通過web端輸入我們之前配置的NameNode節點地址和埠號50070我們可以檢視HDFS檔案系統,例如:瀏覽器中輸入:http://hadoop102:50070 ,可以檢查NameNode和DataNode是否正常。如圖1所示
圖1 NameNode的web端
圖2 YARN的web端
6. 執行PI例項檢查叢集是否啟動成功
在叢集任意節點上執行下面的命令,如果看到如圖3所示的執行結果,則說明叢集啟動成功。
[atguigu@hadoop102 hadoop]$ cd /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/
[atguigu@hadoop102 mapreduce]$ hadoop jar hadoop-mapreduce-examples-2.7.2.jar pi 10 10
最後輸出為
Estimated value of Pi is 3.20000000000000000000
圖3 PI例項執行結果