HDFS 集群由一個主/從架構組成,單個運行 NameNode 進程的服務器為主節點服務器,多個運行 DataNode 進程的服務器為從節點服務器
安裝准備
主機名 | IP地址 | 服務器 |
---|---|---|
node-01 | 192.168.229.21 | NameNode服務器、DataNode服務器 |
node-02 | 192.168.229.22 | DataNode服務器 |
node-03 | 192.168.229.23 | DataNode服務器 |
安裝步驟
1. 上傳 hadoop 安裝包到虛擬機 node-01
安裝包存放路徑:/root/apps
[root@node-01 apps]# ll
總用量 350780
-rw-r--r--. 1 root root 359196911 11月 12 16:45 hadoop-3.2.1.tar.gz
2. 解壓 hadoop 安裝包
[root@node-01 apps]# tar -zxvf hadoop-3.2.1.tar.gz
3. 解壓完畢后刪除 hadoop 安裝包(太大)
[root@node-01 apps]# rm -rf hadoop-3.2.1.tar.gz
4. 刪除 hadoop 文檔(太大)
[root@node-01 hadoop]# cd /root/apps/hadoop-3.2.1/share/
[root@node-01 share]# rm -rf doc
5. 配置 hadoop
hadoop 核心配置如下:
- 設置 hadoop 的默認文件系統為:hdfs
- 設置 hdfs 的 namenode 節點所在虛擬機
- 設置 namenode 軟件存儲元數據的本地目錄
- 設置 datanode 軟件存放文件塊的本地目錄
- 修改 hadoop-env.sh 環境變量
vim 命令打開 hadoop-env.sh 文件取消 54 行 “#JAVA_HOME” 的注釋,並設置為 Java 安裝路徑
[root@node-01 hadoop]# cd /root/apps/hadoop-3.2.1/etc/hadoop
[root@node-01 hadoop]# vim hadoop-env.sh
export JAVA_HOME=/root/apps/jdk1.8.0_141/
- 修改 core-site.xml 配置文件
vim 命令打開 core-site.xml 文件,在
之間添加配置項,配置 HDFS 的訪問 URL 和端口號
[root@node-01 hadoop]# cd /root/apps/hadoop-3.2.1/etc/hadoop
[root@node-01 hadoop]# vim core-site.xml
<configuration
<!-- 指定 hdfs 的 nameservice 為 node-01 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node-01:9000/</value>
</property>
</configuration>
-
修改 hdfs-site.xml 配置文件
vim 命令打開 hdfs-site.xml 文件,在
[root@node-01 hadoop]# cd /root/apps/hadoop-3.2.1/etc/hadoop [root@node-01 hadoop]# vi hdfs-site.xml <configuration> <property> <name>dfs.namenode.name.dir</name> <value>/root/apps/hadoop-3.2.1/data/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/root/apps/hadoop-3.2.1/data/datanode</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>node-02:9868</value> </property> </configuration>
-
修改 yarn-site.xml 配置文件
vim 命令打開 yarn-site.xml 文件,在
[root@node-01 hadoop]# cd /root/apps/hadoop-3.2.1/etc/hadoop [root@node-01 hadoop]# vim yarn-site.xml <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>node-01:8025</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>node-01:8030</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>node-01:8050</value> </property> </configuration>
-
配置 hadoop 環境變量,同時將 Hadoop 各進程的用戶設置為 root
[root@node-01 hadoop-3.2.1]# cd /etc [root@node-01 etc]# vi profile export JAVA_HOME=/root/apps/jdk1.8.0_141/ export HADOOP_HOME=/root/apps/hadoop-3.2.1 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root
-
使配置的環境變量生效
[root@node-01 etc]# source /etc/profile
6. 將虛擬機 node-01 上 已配置好的 hadoop 安裝目錄拷貝給其他虛擬機
# 拷貝hadoop目錄到 node-02 和 node-03
root@node-01 etc]# cd /root/apps/
[root@node-01 apps]# scp -r hadoop-3.2.1 node-02:$PWD
[root@node-01 apps]# scp -r hadoop-3.2.1 node-03:$PWD
#拷貝配置到 node-02 和 node-03
[root@node-01 hadoop-3.2.1]# cd /etc
[root@node-01 etc]# scp profile node-02:$PWD
[root@node-01 etc]# scp profile node-03:$PWD
#執行配置生效
[root@node-02 etc]# source /etc/profile
[root@node-03 etc]# source /etc/profile
7. 啟動 HDFS 的 NameNode 進程
-
格式化
在啟動 Hadoop 之前先要格式化,啟動后可以通過進程查看、瀏覽文件以及瀏覽器方式驗證 Hadoop 是否正常運行
[root@node-01 etc]# hadoop namenode -format
WARNING: Use of this script to execute namenode is deprecated.
WARNING: Attempting to execute replacement "hdfs namenode" instead.
WARNING: /root/apps/hadoop-3.2.1/logs does not exist. Creating.
2020-11-13 02:08:39,891 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = node-01/192.168.229.21
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 3.2.1
...
2020-11-13 02:08:41,969 INFO common.Storage: Storage directory /root/hdpdata/name has been successfully formatted. #表示格式化成功
注意:如果在使用 Hadoop 的過程中出錯,或者 Hadoop 啟動不了,可能需要重新格式化。重新格式化可以參考停止 Hadoop、刪除 Hadoop 下的 data 和 logs 文件夾及進行格式化的步驟進行。
- 在虛擬機 node-01 啟動 namenode 進程
[root@node-01 hadoop]# hdfs --daemon start namenode
[root@node-01 hadoop]# jps
2217 NameNode
2283 Jps
jps 命令專門用於查看 Java 進程, 可以通過 jps 命令查看 namenode 進程是否存在,以確定啟動 namenode 進程是否成功
-
查看 namenode 進程監聽的端口號
注:grep 后的 2217 是之前 jps 命令查詢到的當前 NameNode 進程號,每次啟動 NameNode 進程號是不同的
[root@node-01 hadoop]# netstat -nltp | grep 2217 tcp 0 0 192.168.229.11:9000 0.0.0.0:* LISTEN 2217/java tcp 0 0 0.0.0.0:9870 0.0.0.0:* LISTEN 2217/java
-
9000 端口:用於客戶端與 hdfs 通信端口
-
9870 端口:用於 hdfs 內置的 web 服務器端口
-
-
在 windows 瀏覽器訪問 namenode 提供的 web UI 界面
url地址:http://192.168.229.21:9870(IP地址為虛擬機 node-01 的地址)
8. 啟動 HDFS 的 DataNode
-
分別在虛擬機 node-02、node-03 上啟動 DataNode 進程
第一次啟動提示 WARNING: /root/apps/hadoop-3.2.1/logs does not exist. Creating.,然后再重新啟動一次即可
[root@node-02 ~]# hdfs --daemon start datanode
[root@node-02 ~]# jps
2341 DataNode
2421 Jps
[root@node-03 ~]# hdfs --daemon start datanode
[root@node-03 ~]# jps
2341 DataNode
2421 Jps
-
在 windows 瀏覽器訪問 datanode 提供的 web UI 界面
url地址:http://192.168.229.22:9864( IP地址為虛擬機 node-02 的地址)
9. 腳本批量啟動 HDFS
單獨啟動 HDFS 集群中的每台虛擬機太過繁瑣,可以通過腳本批量啟動 HDFS
- 確認已配置虛擬機 node-01 到集群中所有虛擬機(包含自己)的免密登陸
- 修改 hadoop 安裝目錄中 /etc/hadoop/workers 腳本文件(把需要啟動 datanode 進程的節點列入)
[root@node-01 hadoop]# cd /root/apps/hadoop-3.2.1/etc/hadoop
[root@node-01 hadoop]# vi workers
node-01
node-02
node-03
-
在虛擬機 node-01 上運行腳本 start-dfs.sh 來自動啟動整個集群 hdfs 進程
[root@node-01 hadoop]# start-dfs.sh
-
在虛擬機 node-01 上運行腳本 stop-dfs.sh 來自動停止整個集群 hdfs 進程
[root@node-01 hadoop]# stop-dfs.sh