跟我學丨如何用鯤鵬服務器搭建Hadoop全分佈式集羣

摘要:今天教大家如何利用鯤鵬服務器搭建Hadoop全分佈式集羣,動起來···

本文分享自華爲雲社區《利用鯤鵬服務器快速搭建一個Hadoop全分佈式集羣筆記分享》,原文作者:Jack20。

一、Hadoop常見的三種運行模式

1、單機模式(獨立模式)(Local或Standalone Mode)

默認情況下Hadoop就是處於該模式,用於開發和調式。不對配置文件進行修改。使用本地文件系統,而不是分佈式文件系統。

Hadoop不會啓動NameNode、DataNode、JobTracker、TaskTracker等守護進程,Map()和Reduce()任務作爲同一個進程的不同部分來執行的。

用於對MapReduce程序的邏輯進行調試,確保程序的正確。

2、僞分佈式模式(Pseudo-Distrubuted Mode)

Hadoop的守護進程運行在本機機器,模擬一個小規模的集羣,在一臺主機模擬多主機。

Hadoop啓動NameNode、DataNode、JobTracker、TaskTracker這些守護進程都在同一臺機器上運行,是相互獨立的Java進程。

在這種模式下,Hadoop使用的是分佈式文件系統,各個作業也是由JobTraker服務,來管理的獨立進程。在單機模式之上增加了代碼調試功能,允許檢查內存使用情況,HDFS輸入輸出,以及其他的守護進程交互。類似於完全分佈式模式,因此,這種模式常用來開發測試Hadoop程序的執行是否正確。

3、全分佈式集羣模式(Full-Distributed Mode)

Hadoop的守護進程運行在一個集羣上 Hadoop的守護進程運行在由多臺主機搭建的集羣上,是真正的生產環境。

  1. 下載並解壓Hadoop、JDK安裝包並配置好環境變量、節點域名解析、防火牆、端口等組成相互連通的網絡。
  2. 進入Hadoop的解壓目錄,編輯hadoop-env.sh文件(注意不同版本後配置文件的位置有所變化)
  3. 編輯Hadoop中配置文件core-site.xml(Hadoop集羣的特性,作用於全部進程及客戶端)、hdfs-site.xml(配置HDFS集羣的工作屬性)、mapred-site.xml(配置MapReduce集羣的屬性)、yarn-site.xml四個核心配置文件
  4. 配置ssh,生成密鑰,使到ssh可以免密碼連接localhost,把各從節點生成的公鑰添加到主節點的信任列表。
  5. 格式化HDFS後 使用./start-all.sh啓動Hadoop集羣

二、Hadoop常見組件

Hadoop由HDFS、Yarn、Mapreduce三個核心模塊組成,分別負責分佈式存儲、資源分配和管理、分佈式計算。

1、Hadoop-HDFS模塊

  1. HDFS:是一種分佈式存儲系統,採用Master和Slave的主從結構,主要由NameNode和DataNode組成。HDFS會將文件按固定大小切成若干塊,分佈式存儲在所有DataNode中,每個文件塊可以有多個副本,默認副本數爲3。
  2. NameNode: Master節點,負責元數據的管理,處理客戶端請求。
  3. DataNode: Slave節點,負責數據的存儲和讀寫操作。

2、Hadoop-Yarn模塊

  1. Yarn:是一種分佈式資源調度框架,採用Master和Slave的主從結構,主要由ResourceManager . ApplicationMaster和NodeManager組成,負責整個集羣的資源管理和調度。
  2. ResourceManager:是一個全局的資源管理器,負責整個集羣的資源管理和分配。
  3. ApplicationMaster:當用戶提交應用程序時啓動,負責向ResourceManager申請資源和應用程序的管理。
  4. NodeManager:運行在Slave節點,負責該節點的資源管理和使用。
  5. Container: Yarn的資源抽象,是執行具體應用的基本單位,任何一個Job或應用程序必須運行在一個或多個Container中。

3、Hadoop-Mapreduce模塊

  1. Mapreduce:是一種分佈式計算框架,主要由Map和Reduce兩個階段組成。支持將一個計算任務劃分爲多個子任務,分散到各集羣節點並行計算。
  2. Map階段:將初始數據分成多份,由多個map任務並行處理。
  3. Reduce階段:收集多個Map任務的輸出結果並進行合併,最終形成一個文件作爲reduce階段的結果。

全分佈式集羣模式(Full-Distributed Mode)搭建

【基本環境】

三臺鯤鵬km1.2xlarge.8內存優化型 8vCPUs | 64GB CentOS 7.6 64bit with ARM CPU:Huawei Kunpeng 920 2.6GHz

其中jack20節點作爲NameNode, Node1、 Node2作爲DataNode,而Node1也作爲輔助NameNode ( Secondary NameNode )。

【基本流程】

  1. 下載並解壓Hadoop、JDK安裝包並配置好環境變量、節點域名解析、防火牆、端口
  2. 進入Hadoop的解壓目錄,編輯hadoop-env.sh文件(注意不同版本後配置文件的位置有所變化)
  3. 編輯Hadoop中配置文件core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml四個核心配置文件
  4. 配置ssh,生成密鑰,使到ssh可以免密碼連接localhost
  5. 格式化HDFS後 使用./start-all.sh啓動Hadoop集羣

關閉防火牆和selinux

(1)各個節點都執行命令關閉防火牆:

systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld

(2)關閉selinux

進入selinux的config文件,將selinux原來的強制模式(enforcing)修改爲關閉模式(disabled)

setenforce 0getenforce
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
grep SELINUX=disabled /etc/sysconfig/selinux
cat /etc/sysconfig/selinux

1.安裝openJDK-1.8.0

1.1. 下載安裝openJDK-1.8.0

下載openJDK-1.8.0並安裝到指定目錄(如“/home”)。

進入目錄:

cd /home

下載openJDK-1.8.0並安裝:

wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/hadoop-performance-tuning/OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gz
#解壓
tar -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gz

1.2. 配置環境變量

執行如下命令,打開/etc/profile文件:

vim /etc/profile

點擊鍵盤"Shift+g"移動光標至文件末尾,單擊鍵盤“i”鍵進入編輯模式,在代碼末尾回車下一行,添加如下內容:

下一行,添加如下內容:

export JAVA_HOME=/home/jdk8u252-b09
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

添加完成,單擊鍵盤ESC退出編輯,鍵入“:wq”回車保存並退出。

1.3. 環境變量生效

使環境變量生效:

source /etc/profile

驗證openJDK-1.8.0安裝是否成功:

java -version

1.4.配置域名解析

vim /etc/hosts

2.安裝dstat資源監控工具

yum install dstat-0.7.2-12.el7 -y

驗證dstat是否安裝成功:

dstat -V

3. 部署hadoop-3.1.1

3. 1. 獲取hadoop-3.1.1軟件包

①下載hadoop-3.1.1安裝包到/home目錄下:

cd /home
wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/hadoop-performance-tuning/hadoop-3.1.1.tar.gz
#解壓hadoop-3.1.1
tar -zxvf hadoop-3.1.1.tar.gz

②建立軟鏈接

ln -s hadoop-3.1.1 hadoop

③配置hadoop環境變量,打開/etc/profile文件:

vim /etc/profile

點擊鍵盤"Shift+g"移動光標至文件末尾,單擊鍵盤“i”鍵進入編輯模式,在代碼末尾回車下一行,添加如下內容:

export HADOOP_HOME=/home/hadoop
export PATH=$HADOOP_HOME/bin:$PATH

添加完成,單擊鍵盤ESC退出編輯,鍵入“:wq”回車保存並退出。

④使環境變量生效:

source /etc/profile

⑤驗證hadoop安裝是否成功:

hadoop version

執行結果如下圖所示,表示安裝成功:

3.2. 修改hadoop配置文件

hadoop所有的配置文件都在$HADOOP_HOME/etc/hadoop目錄下,修改以下配置文件前,需要切換到"$HADOOP_HOME/etc/hadoop"目錄。

cd $HADOOP_HOME/etc/hadoop/

①修改hdfs-env.xml

打開hadoop-env.sh文件:

vim hadoop-env.sh

找到hadoop-env.sh的第54行中的java目錄(在命令模式下輸入“:set nu”,查看行數),輸入java的安裝目錄(),然後刪除行左端“#”取消註釋,並保存退出

② 修改core-site.xml

打開core-site.xml文件

vim core-site.xml

在<configuration></configuration>標籤之間添加如下代碼並保存退出

    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://jack20:9000/</value>
        <description> 設定NameNode的主機名及端口</description>
    </property>

    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/tmp/hadoop-${user.name}</value>
        <description>指定hadoop 存儲臨時文件的目錄 </description>
    </property> 
 
    <property>
        <name>hadoop.proxyuser.hadoop.hosts</name>
        <value>*</value>
        <description>配置該superUser允許通過代理的用戶 </description>
    </property>

    <property>
        <name>hadoop.proxyuser.hadoop.groups</name>
        <value>*</value>
        <description>配置該superUser允許通過代理用戶所屬組 </description>
    </property>

③ 修改hdfs-site.xml,

打開hdfs-site.xml文件

vim hdfs-site.xml

在<configuration></configuration>標籤之間添加如下代碼並保存退出

    <property>  
        <name>dfs.namenode.http-address</name>  
        <value>jack20:50070</value>  
        <description> NameNode 地址和端口 </description>  
    </property>
 
    <property>  
        <name>dfs.namenode.secondary.http-address</name>  
        <value>node1:50090</value>  
        <description> Secondary NameNode地址和端口 </description>  
    </property> 
 
    <property>
        <name>dfs.replication</name>
        <value>3</value>
        <description> 設定 HDFS 存儲文件的副本個數,默認爲3 </description>
    </property>
 
    <property>  
        <name>dfs.namenode.name.dir</name>  
        <value>file:///home/hadoop/hadoop3.1/hdfs/name</value>  
               <description> NameNode用來持續存儲命名空間和交換日誌的本地文件系統路徑</description>  
    </property>  

    <property>  
        <name>dfs.datanode.data.dir</name>  
        <value>file:///home/hadoop/hadoop3.1/hdfs/data</value>  
               <description> DataNode在本地存儲塊文件的目錄列表</description>  
    </property> 

    <property>  
        <name>dfs.namenode.checkpoint.dir</name>  
        <value>file:///home/hadoop/hadoop3.1/hdfs/namesecondary</value>  
        <description> 設置 Secondary NameNode存儲臨時鏡像的本地文件系統路徑。如果這是一個用逗號分隔的文件列表,則鏡像將會冗餘複製到所有目錄
        </description>  
    </property> 
 
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
        <description>是否允許網頁瀏覽HDFS文件</description>
    </property>

    <property>
        <name>dfs.stream-buffer-size</name>
        <value>1048576</value>
        <description> 默認是4 KB,作爲Hadoop緩衝區,用於Hadoop讀HDFS的文件和寫HDFS的文件,
                      還有map的輸出都用到了這個緩衝區容量(如果太大了map和reduce任務可能會內存溢出)   
        </description>
    </property> 

④修改mapred-site.xml

打開mapred-site.xml文件:

vim mapred-site.xml

在<configuration></configuration>標籤之間添加如下代碼並保存退出

    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
        <description> 指定MapReduce程序運行在Yarn上 </description>  
    </property>

    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>jack20:10020</value>
        <description> 指定歷史服務器端地址和端口 </description>
    </property>
 
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>jack20:19888</value>
        <description> 歷史服務器web端地址和端口</description>
    </property>

    <property>
          <name>mapreduce.application.classpath</name>
          <value>
           /home/hadoop/etc/hadoop,
           /home/hadoop/share/hadoop/common/*,
           /home/hadoop/share/hadoop/common/lib/*,
           /home/hadoop/share/hadoop/hdfs/*,
           /home/hadoop/share/hadoop/hdfs/lib/*,
           /home/hadoop/share/hadoop/mapreduce/*,
           /home/hadoop/share/hadoop/mapreduce/lib/*,
           /home/hadoop/share/hadoop/yarn/*,
           /home/hadoop/share/hadoop/yarn/lib/*
          </value>
     </property>

    <property>
        <name>mapreduce.map.memory.mb</name>
        <value>6144</value>
        <description> map container配置的內存的大小(調整到合適大小防止物理內存溢出)</description>
    </property>

    <property>
        <name>mapreduce.reduce.memory.mb</name>
        <value>6144</value>
        <description> reduce container配置的內存的大小(調整到合適大小防止物理內存溢出)</description>
    </property>

    <property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=/home/hadoop</value>
    </property>

    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=/home/hadoop</value>
    </property>

    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=/home/hadoop</value>
    </property>

⑤修改yarn-site.xml

打開yarn-site.xml文件:

vim yarn-site.xml

在<configuration></configuration>標籤之間添加如下代碼並保存退出

    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>jack20</value>
        <description> 指定ResourceManager的主機名</description>
    </property>

    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>53248</value>
        <description> NodeManager總的可用物理內存。
                               注意:該參數是不可修改的,一旦設置,整個運行過程中不可動態修改。
                               該參數的默認值是8192MB,即使你的機器內存不夠8192MB,YARN也會按照這些內存來使用,
                               因此,這個值通過一定要配置。
        </description>
     </property>
 
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
        <description> 指定MapReduce走shuffle</description>
    </property>
 
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
 
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>jack20:8032</value>
        <description> 指定ResourceManager對客戶端暴露的地址和端口,客戶端通過該地址向RM提交應用程序,殺死應用程序等</description>
    </property>
 
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>jack20:8030</value>
        <description> 指定ResourceManager對ApplicationMaster暴露的訪問地址。ApplicationMaster通過該地址向RM申請資源、釋放資源等</description>
    </property>
 
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>jack20:8031</value>
        <description> 指定ResourceManager對NodeManager暴露的地址。NodeManager通過該地址向RM彙報心跳,領取任務等</description>
    </property>
 
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>jack20:8033</value>
        <description> 指定ResourceManager 對管理員暴露的訪問地址。管理員通過該地址向RM發送管理命令等</description>
    </property>
 
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>jack20:8088</value>
        <description> 指定ResourceManager對外web UI地址。用戶可通過該地址在瀏覽器中查看集羣各類信息</description>
    </property>

    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
        <description> 開啓日誌聚集功能</description>
    </property>

    <property>  
        <name>yarn.log.server.url</name>  
        <value>http://jack20:19888/jobhistory/logs</value>
        <description> 設置日誌聚集服務器地址</description>
    </property>

    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
        <description> 設置日誌保留時間爲7天</description>
    </property>

⑥將各個節點加入到workers

echo jack20 > workers
echo node1 > workers
echo node2 > workers

⑦修改dfs和yarn的啓動腳本,添加root用戶權限

(1)打開start-dfs.sh和stop-dfs.sh文件:

vim /home/hadoop/sbin/start-dfs.sh
vim /home/hadoop/sbin/stop-dfs.sh

單擊鍵盤“i”鍵進入編輯模式,在兩個配置文件的第一行添加並保存退出:

HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

(2)打開start-yarn.sh 和 stop-yarn.sh文件

vim /home/hadoop/sbin/start-yarn.sh
vim /home/hadoop/sbin/stop-yarn.sh

單擊鍵盤“i”鍵進入編輯模式,在兩個配置文件的第一行添加並保存退出:

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

4.集羣配置&節點間免密登錄

(1)連通性測試

(2)從主節點同步各個節點域名解析文件

scp /etc/hosts node1:/etc/hosts
scp /etc/hosts node2:/etc/hosts

(3) 配置各節點間SSH免密登錄

分別在三臺服務器中輸入命令生成私鑰和公鑰(提示輸入時按回車即可):

ssh-keygen -t rsa

jack20:

node1:

node2:

然後分別在三臺服務器上輸入命令以複製公鑰到服務器中:

ssh-copy-id -i ~/.ssh/id_rsa.pub root@jack20
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2

①繼續連接:輸入“yes”回車;
②輸入密碼(輸入密碼時,命令行窗口不會顯示密碼,輸完之後直接回車)

查看所有協商的祕鑰

SSH免密登錄測試:

Jack20->node1->node2->jack20->node2->node1->jack20

(4) 複製hadoop到各datanode並修改

把jack20的hadoop目錄、jdk目錄、/etc/hosts、/etc/profile複製到node1,node2節點

cd $HADOOP_HOME/..
#hadoop目錄
scp -r hadoop node1:/home
scp -r hadoop node2:/home
#java目錄
scp -r jdk8u252-b09 node1:/home
scp -r jdk8u252-b09 node2:/home

登錄修改各服務器java和haoop環境變量

vim /etc/profile

點擊鍵盤"Shift+g"移動光標至文件末尾,單擊鍵盤“i”鍵進入編輯模式,在代碼末尾回車下一行,添加如下內容並保存退出:

export JAVA_HOME=/home/jdk8u252-b09
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/home/hadoop
export PATH=$HADOOP_HOME/bin:$PATH

使環境變量生效:

source /etc/profile

5.啓動hadoop

注意:如果啓動報錯,請檢查hadoop配置文件是否配置有誤。

第一次啓動前一定要格式化HDFS:

hdfs namenode -format

注意:提示信息的倒數第2行出現“>= 0”表示格式化成功,如圖。在Linux中,0表示成功,1表示失敗。因此,如果返回“1”,就應該好好分析前面的錯誤提示信息,一 般來說是前面配置文件和hosts文件的問題,修改後同步到其他節點上以保持相同環境,再接着執行格式化操作

執行腳本命令羣起節點

cd /home/hadoop/sbin
#羣起節點
./start-all.sh

啓動HDFS後,可以發現jack20節點作爲NameNode, Node1、 Node2作爲DataNode,而Node1也作爲輔助NameNode ( Secondary NameNode )。可以通過jps命令在各節點上驗證HDFS是否啓動。jps 也是Windows中的命令,表示開啓的Java進程如果出現下圖所示的結果,就表示驗證成功。

客戶端Web訪問測試:

(1)RMwebUI界面http://IP:8088

(2)NameNode的webUI界面http://IP:50070

6.集羣基準測試

(1)使用Hadoop自帶的WordCount例子/share/Hadoop/mapredu icehadoop-mapreduce-examples-3.1.1.jar驗證集羣

#創建目錄,目錄/data/wordcount用來存儲Hadoop自帶的WordCount例子的數據文件,運行這個MapReduce任務的結果輸出到目錄中的/output/wordcount文件中
hdfs dfs -mkdir -p /data/wordcount
hdfs dfs -mkdir -p /output/
 
#將本地文件上傳到HDFS中(這裏上傳一個配置文件),執行如下命令
hdfs dfs -put /home/hadoop/etc/hadoop/core-site.xml /data/wordcount

可以查看,上傳後的文件情況,執行如下命令

hdfs dfs -ls /data/wordcount

下面運行WordCount案例,執行如下命令

hadoop jar /home/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.1.jar wordcount /data/wordcount /output/wordcount

(2)DFSIO測試

使用hadoop的DFSIO寫入50個文件,每個文件1000M

hadoop jar /home/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.1-tests.jar TestDFSIO -write -nrFiles 50 -filesize 1000

可以在RMwebUI界面查看當前任務的基本情況,包括內存使用量,CPU使用量等

在NameNode的webUI界面查看剛剛DFSIO測試的各個節點HDFS佔用情況

(3)計算圓周率的大小

hadoop jar /home/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.1-tests.jar pi 20 20

靜靜等待結果就可以~

 

點擊關注,第一時間瞭解華爲雲新鮮技術~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章