1. 程式人生 > 其它 >HDFS 叢集環境搭建

HDFS 叢集環境搭建

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 檔案,在之間新增配置項,配置訪問 NameNode 和 DataNode 的元資料儲存路徑,以及 SecondaryNameNode 的訪問埠

    複製程式碼
    [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 檔案,在之間新增配置項,配置 nodemanager 和 resourcemanager 的訪問埠等資訊

    複製程式碼
    [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