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