1. 程式人生 > 其它 >Hadoop3 完全分散式執行模式-叢集配置

Hadoop3 完全分散式執行模式-叢集配置

叢集配置

現在各個伺服器的準備工作已經做好了,但是Hadoop之間是沒有任何關係的

叢集部署規劃

1.NameNode和SecondaryNameNode不要安裝在同一臺伺服器,因為都耗記憶體。
2.ResourceManager也很小號記憶體,不要和NameNode、SecondaryNameNode配置在同一臺機器上。

配置檔案說明

預設配置檔案

自定義配置檔案
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-size.xml,四個配置檔案存放在$HADOOP_HOME(自己安裝hadoop的路徑)/etc/hadoop這個路徑上,使用者可以根據專案需求重新進行修改配置。

配置叢集

1 核心配置檔案
配置 core-site.xml

[root@hadoop102 ~]# cd /opt/module/hadoop-3.1.3/etc/hadoop
[root@hadoop102 hadoop]# vim core-size.xml

任務:
1.指定NameNode在哪個伺服器上 - hadoop102上

 <!-- 指定 NameNode 的地址 -->
    <property> 
        <name>fs.defaultFS</name> 
        <value>hdfs://hadoop102:8020</value> //內部通訊地址
 </property> 

2.hadoop資料儲存在哪個目錄下 - /opt/module/hadoop-3.1.3/data

    <!-- 指定 hadoop 資料的儲存目錄 -->
    <property>
        <name>hadoop.tmp.dir</name> 
        <value>/opt/module/hadoop-3.1.3/data</value> 
    </property>

3.配置HDFS網頁登入使用的靜態使用者為root(可以先不配)

  <!-- 配置 HDFS 網頁登入使用的靜態使用者為 ranan -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>ranan</value>
    </property>

2 HDFS配置檔案
配置 hdfs-site.xml

[ranan@hadoop102 hadoop]$ vim hdfs-site.xml

任務:
1.NameNode Web端訪問地址

之前核心配置檔案中NameNode地址hdfs://hadoop102:8020相當於是hadoop內部通訊地址,現在NameNode是HDFS需要使用者在web介面上訪問,不需要操作命令列,即也需要對外暴露一個介面hadoop102:9870

  <!-- NameNode web 端訪問地址--> 
  <property> 
        <name>dfs.namenode.http-address</name> 
        <value>hadoop102:9870</value> 
    </property>

2.SecondaryNameNode web 端訪問地址

 <!-- SecondaryNameNode web 端訪問地址--> 
    <property> 
        <name>dfs.namenode.secondary.http-address</name> 
        <value>hadoop104:9868</value> 
    </property>

3 YARN配置檔案
配置yarn-site.xml

[ranan@hadoop102 hadoop]$ vim yarn-site.xml

任務:
1.MR走什麼協議,什麼方式進行資源排程

   <!-- 指定 MR 走 shuffle --> 
    <property> 
        <name>yarn.nodemanager.aux-services</name> 
        <value>mapreduce_shuffle</value> //shuffle方式進行資源排程
    </property> 

2.指定ResourceManager指定 - hadoop103

   <!-- 指定 ResourceManager 的地址--> 
    <property> 
        <name>yarn.resourcemanager.hostname</name> 
        <value>hadoop103</value> 
    </property> 

3.環境變數的繼承

處理原因:3.1版本的bug?

<!-- 環境變數的繼承 --> 
    <property> 
        <name>yarn.nodemanager.env-whitelist</name> 
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> 
    </property> 

預設配置檔案yarn_defaut.xml中是有預設值

//yarn_defaut.xml中的預設值

JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ 

//yarn-site.xml設定的值

JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME

4 MapReduce配置檔案
配置mapred-site.xml

[ranan@hadoop102 hadoop]$ vim mapred-site.xml

任務:
指定MapReduce程式執行在Yarn上,由yarn負責MapReduce程式的資源排程。

  <!-- 指定 MapReduce 程式執行在 Yarn 上 --> 
    <property>
        <name>mapreduce.framework.name</name> 
        <value>yarn</value>//預設是local
    </property>

5 分發叢集配置
hadoop102的配置檔案配置完成了,需要將配置檔案分發給hadoop103、hadoop104
(之前是放在/root/bin/xsync 這裡拷貝在了/home/ranan/bin下)

//ranan身份使用命令許可權不夠,加入sudo以root的許可權進行分發
[ranan@hadoop102 bin]$ sudo ./xsync /opt/module/hadoop-3.1.3/etc/hadoop/

群起叢集

剛才已經把叢集都配置完畢了,現在需要啟動叢集

1 配置workers

叢集上有幾個節點就配置幾個主機名稱

[ranan@hadoop102 bin]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers 

同步所有節點配置檔案

[leokadia@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc

分發配置,將三臺節點配置完畢,回到hadoop家目錄,準備啟動叢集

2 啟動叢集

如果叢集是第一次啟動,需要在hadoop102節點格式化NameNode(相當於新插入的硬碟)

注意:格式化 NameNode,會產生新的叢集 id,導致 NameNode 和 DataNode 的叢集 id 不一致,叢集找不到已往資料。如果叢集在執行過程中報錯,需要重新格式化 NameNode 的話,一定要先停止 namenode 和 datanode 程序,並且要刪除所有機器的 data 和 logs 目錄,然後再進行格式化。

[ranan@hadoop102 hadoop-3.1.3]$ hdfs namenode -format

初始化完畢後,源路徑多了兩個目錄data、logs

1 啟動叢集

[ranan@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh

發現hadoop103建立logs的許可權不夠,是root使用者的,那麼修改成ranan就行了。修改萬完成後重新執行啟動叢集命令

[ranan@hadoop103 module]$ sudo chown -R ranan:ranan /opt/module/hadoop-3.1.3/

2 檢查是否和規劃一致

叢集部署規劃

使用jps檢視每臺虛擬機器的真實情況

hadoop102

hadoop103

hadoop104

啟動完成後,HDFS還提供了Web頁面:http://hadoop102:9870/

3 在配置了 ResourceManager 的節點 (hadoop103 )啟動 YARN

上傳資料不牽扯yarn,牽扯到MapReduce才會啟動YARN

[ranan@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh

啟動完成後YARN也提供了Web頁面,檢視任務的執行情況:http://hadoop103:8088

總結

HDFS的啟動[ranan@hadoop103 hadoop-3.1.3]$ sbin/start-dfs.sh
在配置了 ResourceManager 的節點 (hadoop103 )啟動 YARN[ranan@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh

3 叢集基本測試

上傳檔案到叢集

上傳小檔案

[ranan@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /wcinput
[ranan@hadoop102 hadoop-3.1.3]$ hadoop fs -put wcinput/word.txt /wcinput


上傳大檔案

[ranan@hadoop102 hadoop-3.1.3]$ hadoop fs -put /opt/software/jdk-8u212-linux-x64.tar.gz /

這裡面實際只儲存了一個連結,實際儲存的資料在DataNode

檢視資料真實儲存路徑

真實儲存的路徑

[ranan@hadoop102 subdir0]$ pwd
/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1612211493-192.168.10.102-1624417910221/current/finalized/subdir0/subdir0

檢視word.txt

cat blk_1073741825

檢視jdk

把blk_1073741826、blk_1073741827檔案輸出到tmp.tar.gz。再把壓縮包解壓到當前路徑。

[ranan@hadoop102 subdir0]$ cat blk_1073741826>>tmp.tar.gz
[ranan@hadoop102 subdir0]$ cat blk_1073741827>>tmp.tar.gz
[ranan@hadoop102 subdir0]$ tar -zxvf tmp.tar.gz //解壓到當前路徑
![image](https://img2020.cnblogs.com/blog/1345685/202106/1345685-20210623161006102-802042742.png)

Hadoop高可用,任何一個伺服器掛了還有兩份副本,每臺伺服器都是一個NameNode

下載

[ranan@hadoop104 subdir0]# hadoop fs -get /jdk-8u212-linux-x64.tar.gz ./

執行wordcount程式

HDFS方式執行,輸入輸出的路徑也需要是叢集的路徑

[ranan@hadoop102 subdir0]# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput

Web端檢視YARN的ResourceManager發現了剛剛的任務

點選history報錯,因為我們還沒有配置history伺服器,如果關閉頁面,剛剛任務的執行情況就沒了。
所以是需要配置history伺服器的,檢視任務的執行情況。

配置歷史伺服器

1 配置mapred-site.xml

先去配置資訊存放的檔案/opt/module/hadoop-3.1.3/etc/hadoop

[ranan@hadoop102 hadoop]$ vim mapred-site.xml

1.歷史伺服器配置在哪臺伺服器上? - hadoop102:10020

<!-- 歷史伺服器端地址 -->
<property> 
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop102:10020</value> //內部通訊埠
</property>

2.歷史服務對外暴露的介面,Web頁面。

<!-- 歷史伺服器 web 端地址 --> 
<property> 
    <name>mapreduce.jobhistory.webapp.address</name> 
    <value>hadoop102:19888</value> 
</property> 

2 分發mapred-site.xml

[ranan@hadoop102 bin]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml 

3 在hadoop102啟動歷史伺服器

先重啟yarn,再啟動歷史伺服器

[ranan@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh

[ranan@hadoop102 hadoop]$ mapred --daemon start historyserver

4 測試

[ranan@hadoop103 hadoop-3.1.3]$ hadoop fs -mkdir /input
[ranan@hadoop103 hadoop-3.1.3]$ hadoop fs -put wcinput/word.txt /input
[ranan@hadoop103 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input output

點選History

頁面跳轉到歷史伺服器暴露的web頁面

配置日誌的聚集

logs點選後無法顯示正常功能

日誌聚集的概念
應用執行完成以後,將程式執行的日誌資訊上傳到HDFS系統上。可以方便的檢視程式執行詳情,方便開發除錯。

開啟日誌聚集功能,需要重新啟動 NodeManager 、ResourceManager 和HistoryServer

1 配置yarn-site.xml

[ranan@hadoop102 hadoop]$ vim yarn-site.xml 

設定yarn.log開啟
歷史伺服器是hadoop102:19888,為了方便歷史伺服器檢視。logs聚集在hadoop102上http://hadoop102:19888/jobhistory/logs
設定日誌保留時間為7天

<!-- 開啟日誌聚集功能 --> 
<property> 
    <name>yarn.log-aggregation-enable</name> 
    <value>true</value>  //預設值是false
</property> 
<!-- 設定日誌聚集伺服器地址 --> 
<property>   
    <name>yarn.log.server.url</name>   
    <value>http://hadoop102:19888/jobhistory/logs</value> 
</property> 
<!-- 設定日誌保留時間為 7 天 --> 
<property> 
    <name>yarn.log-aggregation.retain-seconds</name> 
    <value>604800</value> 
</property>

2 分發yarn-site.xml

[ranan@hadoop102 hadoop]$ xsync yarn-site.xml

3 重啟yarn對應的服務

因為修改了yarn的配置,所以需要重新啟動yarn

關閉historyServer

[ranan@hadoop102 hadoop-3.1.3]$ mapred --daemon stop historyserver

關閉NodeManager、ResourceManager

[ranan@hadoop102 hadoop-3.1.3]$ sbin/stop-yarn.sh

重啟

[ranan@hadoop102 hadoop-3.1.3]$ sbin/start-yarn.sh
[ranan@hadoop102 hadoop-3.1.3]$ mapred --daemon start historyserver

後面執行的任務就可以檢視logs了。

4 測試

重新執行命令

[ranan@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /ourput2