-
叢集部署規劃
注意:
- NameNode和SecondaryNameNode不要安裝在同一台伺服器
- ResourceManager也很消耗記憶體,不要和NameNode、SecondaryNameNode配置在同一台機器上。
hadoop102 | hadoop103 | hadoop104 | |
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
-
配置檔案說明
Hadoop配置檔案分兩類:預設配置檔案和自定義配置檔案,隻有使用者想修改某一預設配置值時,才需要修改自定義配置檔案,更改相應屬性值。
2.1 預設配置檔案
要擷取的預設檔案 | 檔案存放在Hadoop的jar包中的位置 |
[core-default.xml] | hadoop-common-3.1.3.jar/core-default.xml |
[hdfs-default.xml] | hadoop-hdfs-3.1.3.jar/hdfs-default.xml |
[yarn-default.xml] | hadoop-yarn-common-3.1.3.jar/yarn-default.xml |
[mapred-default.xml] | hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml |
2.2 自定義配置檔案
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四個配置檔案存放在$HADOOP_HOME/etc/hadoop這個路徑上,使用者可以根據項目需求重新進行修改配置。
3.配置叢集
3.1 核心配置檔案
3.1.1 配置core-site.xml
[[email protected] ~]$ cd $HADOOP_HOME/etc/hadoop
[[email protected] hadoop]$ vim core-site.xml
檔案内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" ?>
<configuration>
<!-- 指定NameNode的位址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定hadoop資料的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS網頁登入使用的靜态使用者為atguigu -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>atguigu</value>
</property>
</configuration>
3.1.2 配置hdfs-site.xml [HDFS配置檔案]
[[email protected] ~]$ cd $HADOOP_HOME/etc/hadoop
[[email protected] hadoop]$ vim hdfs-site.xml
檔案内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" ?>
<configuration>
<!-- nn web端通路位址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web端通路位址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
3.1.3 配置yarn-site.xml [YARN配置檔案]
[[email protected] ~]$ cd $HADOOP_HOME/etc/hadoop
[[email protected] hadoop]$ vim yarn-site.xml
檔案内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" ?>
<configuration>
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的位址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 環境變量的繼承 -->
<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>
</configuration>
3.1.4 配置mapred-site.xml [MapReduce配置檔案]
[[email protected] ~]$ cd $HADOOP_HOME/etc/hadoop
[[email protected] hadoop]$ vim mapred-site.xml
檔案内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" ?>
<configuration>
<!-- 指定MapReduce程式運作在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
3.1.5 在叢集上分發配置好的Hadoop配置檔案
[[email protected] ~]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/
# 去103和104上檢視檔案分發情況
[[email protected] ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
[[email protected] ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
3.2 群起叢集
3.2.1 配置workers
[[email protected] hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
在該檔案中增加如下内容:
hadoop102
hadoop103
hadoop104
注意:該檔案中添加的内容結尾不允許有空格,檔案中不允許有空行。
同步所有節點配置檔案:
[[email protected] hadoop]$ xsync /opt/module/hadoop-3.1.3/etc
3.2.2 啟動叢集
(1)格式化NameNode。
如果叢集是第一次啟動,需要在hadoop102節點格式化NameNode(注意:格式化NameNode,會産生新的叢集id,導緻NameNode和DataNode的叢集id不一緻,叢集找不到已往資料。如果叢集在運作過程中報錯,需要重新格式化NameNode的話,一定要先停止namenode和datanode程序,并且要删除所有機器的data和logs目錄,然後再進行格式化。)
[[email protected] hadoop-3.1.3]$ hdfs namenode -format
(2) 啟動HDFS
[[email protected] hadoop-3.1.3]$ sbin/start-dfs.sh
(3)啟動YARN
在配置了ResourceManager的節點(hadoop103)啟動YARN
[[email protected] hadoop-3.1.3]$ sbin/start-yarn.sh
3.2.3 叢集啟動/停止方式總結
(1)各個子產品分開啟動/停止(配置ssh是前提)常用
- 整體啟動/停止HDFS
start-dfs.sh/stop-dfs.sh
- 整體啟動/停止YARN
start-yarn.sh/stop-yarn.sh
(2)各個服務元件逐一啟動/停止
- 分别啟動/停止HDFS元件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
- 啟動/停止YARN
yarn --daemon start/stop resourcemanager/nodemanager
3.3 編寫Hadoop叢集常用腳本
3.3.1 Hadoop叢集啟停腳本(包含HDFS,Yarn,Historyserver):myhadoop.sh
[[email protected] ~]$ cd /home/atguigu/bin
[[email protected] bin]$ vim myhadoop.sh
- 輸入如下内容:
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " ======啟動 hadoop叢集 ======="
echo " --------------- 啟動 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 啟動 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
;;
"stop")
echo " ==========關閉 hadoop叢集 ========="
echo " --------------- 關閉 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 關閉 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
- 儲存後退出,然後賦予腳本執行權限
[[email protected] bin]$ chmod +x myhadoop.sh
3.3.2 檢視三台伺服器Java程序腳本:jpsall
[[email protected] ~]$ cd /home/atguigu/bin
[[email protected] bin]$ vim jpsall
- 輸入如下内容:
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done
- 儲存後退出,然後賦予腳本執行權限
[[email protected] bin]$ chmod +x jpsall
分發/home/atguigu/bin目錄,保證自定義腳本在三台機器上都可以使用。
[[email protected] ~]$ xsync /home/atguigu/bin/
3.4 常用網址
(1)Web端檢視HDFS的NameNode
①浏覽器中輸入:http://hadoop102:9870
②檢視HDFS上存儲的資料資訊
(2)Web端檢視YARN的ResourceManager
①浏覽器中輸入:http://hadoop103:8088
②檢視YARN上運作的Job資訊
3.3 配置曆史伺服器
為了檢視程式的曆史運作情況,需要配置一下曆史伺服器。具體配置步驟如下:
1)配置mapred-site.xml
[[email protected] ~]$ cd $HADOOP_HOME/etc/hadoop
[[email protected] hadoop]$ vim mapred-site.xml
在該檔案裡面增加如下配置:
<!-- 曆史伺服器端位址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 曆史伺服器web端位址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
2)分發配置
[[email protected] hadoop]$ xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
3)在hadoop102啟動曆史伺服器
[[email protected] hadoop]$ mapred --daemon start historyserver
4)檢視曆史伺服器是否啟動
[[email protected] hadoop]$ jps
5)檢視JobHistory
http://hadoop102:19888/jobhistory
3.4 配置日志的聚集
日志聚集概念:應用運作完成以後,将程式運作日志資訊上傳到HDFS系統上。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CMzU2MjNTY5ImZlVTM5cjM4kTY1cjYiljM2EWNjBTM58CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
日志聚集功能好處:可以友善的檢視到程式運作詳情,友善開發調試。
注意:開啟日志聚集功能,需要重新啟動NodeManager、ResourceManager和HistoryServer。
開啟日志聚集功能具體步驟如下:
1)配置yarn-site.xml
[[email protected] ~]$ cd $HADOOP_HOME/etc/hadoop
[[email protected] hadoop]$ vim yarn-site.xml
在該檔案裡面增加如下配置:
<!-- 開啟日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</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)分發配置
[atguigu@hadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
3)關閉NodeManager 、ResourceManager和HistoryServer
[[email protected] hadoop-3.1.3]$ sbin/stop-yarn.sh
[atg[email protected] hadoop-3.1.3]$ mapred --daemon stophistoryserver
4)啟動NodeManager 、ResourceManage和HistoryServer
[[email protected] ~]$ start-yarn.sh
[[email protected] ~]$mapred --daemon start historyserver
5) 檢視日志
曆史伺服器位址中的曆史任務清單
http://hadoop102:19888/jobhistory
3.5 常用端口号說明
端口名稱 | Hadoop2.x | Hadoop3.x |
NameNode内部通信端口 | 8020 / 9000 | 8020 / 9000/9820 |
NameNode HTTP UI | 50070 | 9870 |
MapReduce檢視執行任務端口 | 8088 | 8088 |
曆史伺服器通信端口 | 19888 | 19888 |
3.6 叢集時間同步
如果伺服器在公網環境(能連接配接外網),可以不采用叢集時間同步,因為伺服器會定期和公網時間進行校準;
如果伺服器在内網環境,必須要配置叢集時間同步,否則時間久了,會産生時間偏差,導緻叢集執行任務時間不同步。
1)需求
找一個機器,作為時間伺服器,所有的機器與這台叢集時間進行定時的同步,生産環境根據任務對時間的準确程度要求周期同步。測試環境為了盡快看到效果,采用1分鐘同步一次。
2)時間伺服器配置(必須root使用者)
(1)檢視hadoop102服務狀态和開機自啟動狀态(如果開着就關掉)
[[email protected] ~]$ sudo systemctl status ntpd
[[email protected] ~]$ sudo systemctl is-enabled ntpd
# 關閉
[[email protected] ~]$ sudo systemctl disabled ntpd
(2)修改hadoop102的ntp.conf配置檔案
[[email protected] ~]$ sudo vim /etc/ntp.conf
修改内容如下:
①修改1(授權192.168.10.0-192.168.10.255網段上的所有機器可以從這台機器上查詢和同步時間)
#restrict192.168.1.0 mask 255.255.255.0 nomodify notrap
====> 将上面的注釋去掉(并将192.168.1.0改成192.168.10.0)
restrict 192.168.10.0 mask255.255.255.0 nomodify notrap
②修改2(叢集在區域網路中,不使用其他網際網路上的時間)
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
====> 給上面的内容添加注釋
#server0.centos.pool.ntp.org iburst
#server1.centos.pool.ntp.org iburst
#server2.centos.pool.ntp.org iburst
#server3.centos.pool.ntp.org iburst
③添加3(當該節點丢失網絡連接配接,依然可以采用本地時間作為時間伺服器為叢集中的其他節點提供時間同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
(3)修改hadoop102的/etc/sysconfig/ntpd 檔案
[[email protected] ~]$ sudo vim /etc/sysconfig/ntpd
增加内容如下(讓硬體時間與系統時間一起同步)
SYNC_HWCLOCK=yes
(4)重新啟動ntpd服務
[[email protected] ~]$ sudo systemctl start ntpd
(5)設定ntpd服務開機啟動
[[email protected] ~]$ sudo systemctl enable ntpd
3)其他機器配置(必須root使用者)
(1)關閉所有節點上ntp服務和自啟動
[[email protected] ~]$ systemctl stop ntpd
[[email protected] ~]$ systemctl disable ntpd
[[email protected] ~]$ systemctl stop ntpd
[[email protected] ~]$ systemctl disable ntpd
(2)在其他機器配置1分鐘與時間伺服器同步一次
[[email protected] ~]$ sudo crontab -e
編寫定時任務如下:
*/1 * * * * /usr/sbin/ntpdate hadoop102
(3)修改任意機器時間
[[email protected] ~]$ date -s "2021-9-1111:11:11"
(4)1分鐘後檢視機器是否與時間伺服器同步
[[email protected] ~]$ date
4. Hadoop常用網址
- Web端檢視HDFS的NameNode:
- http://hadoop102:9870
- 檢視HDFS上存儲的資料資訊
- Web端檢視YARN的ResourceManager
- http://hadoop103:8088
- 檢視YARN上運作的Job資訊
- 檢視JobHistory
- http://hadoop102:19888/jobhistory