1. 程式人生 > 程式設計 >零基礎搭建Hadoop叢集

零基礎搭建Hadoop叢集

一、配置虛擬機器器網路(NAT 模式)

宿主機ipconfig截圖:


Vmnet8網路配置:


虛擬機器器網路配置:




二、配置一個單節點環境

2.1 上傳檔案到CentOS並配置Java和Hadoop環境

上傳安裝包到伺服器:


上傳成功後,看到兩個壓縮包:


解壓兩個壓縮包:


給檔案重新命名,方便之後配置環境變數:


配置jdk+hadoop環境變數:


檢視jdk環境變數是否配置成功:


檢視hadoop環境變數是否配置成功:


---------------------------------------------------------------------------------------

至此jdk和hadoop已經安裝好,接下來修改一些配置檔案

2.2 修改CentOS主機名

預設主機名:


檢視和修改主機名:



永久修改主機名,修改配置檔案執行命令: vi /etc/sysconfig/network:



2.3 繫結hostname與IP

繫結hostname和ip,執行命令:vi /etc/hosts


2.4 關閉防火牆


2.5 Hadoop目錄結構

1、檢視Hadoop目錄結構,執行命令:ll


2、重要目錄

(1)bin目錄:存放對Hadoop相關服務(HDFS,YARN)進行操作的指令碼

(2)etc目錄:Hadoop的配置檔案目錄,存放Hadoop的配置檔案

(3)lib目錄:存放Hadoop的本地庫(對資料進行壓縮解壓縮功能)

(4)sbin目錄:存放啟動或停止Hadoop相關服務的指令碼

(5)share目錄:存放Hadoop的依賴jar包、檔案、和官方案例


三、Hadoop三種執行模式

Hadoop執行模式包括:本地模式、偽分散式模式以及完全分散式模式。

Hadoop官方網站:hadoop.apache.org/

模式一:本地執行模式

官方Grep案例


1. 建立在hadoop2.8.5檔案下面建立一個input資料夾

[root@node hadoop2.8.5]$ mkdir input複製程式碼

2. 將Hadoop的xml配置檔案複製到input

[root@node hadoop2.8.5]$ cp etc/hadoop/*.xml input複製程式碼

3. 執行share目錄下的MapReduce程式

[root@node hadoop2.8.5]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jargrep input output 'dfs[a-z.]+'
複製程式碼

4. 檢視輸出結果

[root@node hadoop2.8.5]$ cat output/*複製程式碼

控制檯結果展示:




官方WordCount案例

1. 建立在hadoop2.8.5檔案下面建立一個wcinput資料夾

[root@node hadoop2.8.5]$ mkdir wcinput複製程式碼

2. 在wcinput檔案下建立一個wc.input檔案

[root@node hadoop2.8.5]$ cd wcinput
[root@node hadoop2.8.5]$ touch wc.input
複製程式碼

3. 編輯wc.input檔案

[root@node hadoop2.8.5]$ vi wc.input複製程式碼

在檔案中輸入如下內容

hadoop 

hadoop 

mapreduce

yarn

儲存退出::wq

4. 回到Hadoop目錄/opt/module/hadoop2.8.5

5. 執行程式

[root@node hadoop2.8.5]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar wordcount wcinput wcoutput
複製程式碼

6. 檢視結果

[root@node hadoop2.8.5]$ cat wcoutput/part-r-00000複製程式碼

hadoop 2

mapreduce 1

yarn 1

案例結果展示:





模式二:偽分散式執行模式

啟動HDFS並執行MapReduce程式

1. 配置叢集

(1)配置:hadoop-env.sh

        export JAVA_HOME=/usr/java/jdk1.8/

(2)配置:core-site.xml

<!-- 指定HDFS中NameNode的地址 -->
<property>
   <name>fs.defaultFS</name>
   <value>hdfs://node:9000</value>
</property>
<!-- 指定Hadoop執行時產生檔案的儲存目錄 -->
<property>
   <name>hadoop.tmp.dir</name>
   <value>/usr/java/hadoop2.8.5/data/tmp</value>
</property>複製程式碼

(3)配置:hdfs-site.xml

<!-- 指定HDFS副本的數量 -->
<property>
   <name>dfs.replication</name>
   <value>3</value>
</property>
複製程式碼


2. 啟動叢集

(1)格式化NameNode(第一次啟動時格式化,以後就不要總格式化)

[root@node hadoop2.8.5]$ hdfs namenode -format複製程式碼


(2)啟動NameNode

[root@node hadoop2.8.5]$ hadoop-daemon.sh start namenode複製程式碼


(3)啟動DataNode

[root@node hadoop2.8.5]$ hadoop-daemon.sh
start datanode複製程式碼



3. 檢視叢集

(1)檢視是否啟動成功,執行命令jps

         注意:jps是JDK中的命令,不是Linux命令。不安裝JDK不能使用jps

(2)web端檢視HDFS檔案系統

http://node:50070

注意:在Windows環境通過URL訪問,需要在C:\Windows\System32\drivers\etc\hosts,在其中新增192.168.158.128 node即可。


(3)檢視產生的Log日誌


本地檢視日誌:


web端檢視日誌:


(4)思考:為什麼不能一直格式化NameNode,格式化NameNode,要注意什麼?

[root@node hadoop2.8.5]$ cd data/tmp/dfs/name/current/
[root@node hadoop2.8.5]$ cat VERSION
複製程式碼

clusterID=clusterID=CID-1e77ad8f-5b3f-4647-a13a-4ea3f01b6d65

[root@node hadoop2.8.5]$ cd data/tmp/dfs/data/current/複製程式碼

clusterID=clusterID=CID-1e77ad8f-5b3f-4647-a13a-4ea3f01b6d65

注意:格式化NameNode,會產生新的叢集id,導致NameNode和DataNode的叢集id不一致,叢集找不到已往資料。所以,格式NameNode時,一定要先刪除data資料和log日誌,然後再格式化NameNode。


4. 操作叢集

(1)在HDFS檔案系統上建立一個input資料夾

執行命令: hdfs dfs -mkdir -p /usr/java/hadoop/input




(2)將本地測試檔案內容上傳到檔案系統上

執行命令:hdfs dfs -put wcinput/wc.input /user/java/hadoop/input/




(3)檢視上傳的檔案是否正確

執行命令:hdfs dfs -cat /usr/java/hadoop/input/wc.input



(4)執行MapReduce程式

執行命令:hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar wordcount /usr/java/hadoop/input/ /usr/java/hadoop/output



(5)檢視輸出結果

執行命令:hdfs dfs -cat /usr/java/hadoop/output/*





(6)將測試檔案內容下載到本地

執行命令:hdfs dfs -get /usr/java/hadoop/output/part-r-00000 wcoutput/



(7)刪除輸出結果

執行命令:hdfs dfs -rm -f /usr/java/hadoop/output




啟動YARN並執行MapReduce程式

1. 配置叢集

(1)配置yarn-env.sh


(2)配置yarn-site.xml

<!-- Reducer獲取資料的方式-->
<property>
     <name>yarn.nodemanager.aux-services</name>
     <value>mapreduce_shuffle</value>
</property>
 
<!-- 指定YARN的ResourceManager的地址-->
<property>
   <name>yarn.resourcemanager.hostname</name>
   <value>node</value>
</property>
複製程式碼



(3)配置:mapred-env.sh



(4)配置: (對mapred-site.xml.template重新命名為) mapred-site.xml

<!-- 指定MR執行在YARN上 -->
<property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
</property>
複製程式碼



2. 啟動叢集

(1)啟動前必須保證NameNode和DataNode已經啟動

(2)啟動ResourceManager

執行命令:yarn-daemon.sh start resourcemanager

(3)啟動NodeManager

執行命令:yarn-daemon.sh start nodemanager



3. 叢集操作

(1)YARN的瀏覽器頁面檢視,如圖2-35所示

http://node:8088/cluster


(2)刪除檔案系統上的output檔案

執行命令:hdfs dfs -rm -f /usr/java/hadoop/output

(3)執行MapReduce程式

執行命令:hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar wordcount /usr/java/hadoop/input/ /usr/java/hadoop/output

(4)檢視執行結果



模式三:完全分散式執行模式


1. 克隆虛擬機器器


2. 修改配置檔案

(1)vi /etc/sysconfig/network-scripts/ifcfg-ens33


  (2)  vi /etc/sysconfig/network


  (3)  vi /etc/hosts



3. 叢集部署規劃

node

node1

node2

HDFS

NameNode

DataNode

DataNode

SecondaryNameNode

DataNode

YARN

NodeManager

ResourceManager

NodeManager

NodeManager

4. 配置叢集

(1)配置core-site.xml

<!-- 指定HDFS中NameNode的地址-->
<property>
     <name>fs.defaultFS</name> 
     <value>hdfs://node:9000</value>
</property>
 
<!-- 指定Hadoop執行時產生檔案的儲存目錄-->
<property>
     <name>hadoop.tmp.dir</name>
     <value>/usr/java/hadoop2.8.5/data/tmp</value>
</property>
複製程式碼


(2)HDFS配置檔案

  • 配置hadoop-env.sh

export JAVA_HOME=/usr/java/jdk1.8/複製程式碼
  • 配置hdfs-site.xml

<property>
     <name>dfs.replication</name>
     <value>3</value>
</property>
 
<!-- 指定Hadoop輔助名稱節點主機配置 -->
<property>
     <name>dfs.namenode.secondary.http-address</name>
     <value>node2:50090</value>
</property>
複製程式碼



(3)YARN配置檔案

  • 配置yarn-env.sh
export JAVA_HOME=/usr/java/jdk1.8/複製程式碼
  • 配置yarn-site.xml

<!-- Reducer獲取資料的方式-->
<property>
     <name>yarn.nodemanager.aux-services</name>
     <value>mapreduce_shuffle</value>
</property>
 
<!-- 指定YARN的ResourceManager的地址-->
<property>
     <name>yarn.resourcemanager.hostname</name>
     <value>node1</value>
</property>
複製程式碼



(4)MapReduce配置檔案

  • 配置mapred-env.sh
export JAVA_HOME=/usr/java/jdk1.8/複製程式碼
  • 配置mapred-site.xml

<!-- 指定MR執行在Yarn上-->
<property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
</property>
複製程式碼



5. 節點之間免密通訊:  ssh配置免密登入











6. 群起叢集

啟動HDFS:start-dfs.sh



啟動yarn:  start-yarn.sh



[node] jps 



[node1] jps



[node2] jps


叢集命令:

啟動/停止HDFS

start-dfs.sh / stop-dfs.sh

啟動/停止YARN

start-yarn.sh / stop-yarn.sh

全部啟動/全部停止

start-all.sh / stop-all.sh