Hadoop 3.2.0 在 CentOS 7 下搭建僞分佈式和完全分佈式集羣的案例 公共部分 僞分佈式的搭建 完全分佈式的搭建 4 啓動 Hadoop 其它

環境及工具

  • Hadoop 3.2.0
  • Windows 10 1809
  • CentOS 7.6.1810
  • VMware 15.1.0
  • OpenJDK 8(Amazon Corretto 8.222.10.1)

注意事項:由於 javax.* 等擴展庫的原因,使用 JDK 9 及以上版本無法啓動 nodemanagerresourcemanager

分類

  • 僞分佈式:只有一個節點
  • 完全分佈式:多個節點

不管哪一種方式,都要完成公共部分的配置。

公共部分

1 安裝操作系統

本案例使用標準安裝版鏡像。官方提供的 ISO 鏡像文件如下:

  • CentOS-7-x86_64-DVD-1810.iso,標準安裝版(本案例使用)
  • CentOS-7-x86_64-Everything-1810.iso,對完整版安裝盤的軟件進行補充,集成所有軟件
  • CentOS-7-x86_64-LiveGNOME-1810.iso,GNOME桌面版
  • CentOS-7-x86_64-LiveKDE-1810.iso,KDE桌面版
  • CentOS-7-x86_64-Minimal-1810.iso,精簡版
  • CentOS-7-x86_64-NetInstall-1810.iso,網絡安裝鏡像

1.1 下載地址

1.2 安裝

使用 VMware 加載鏡像進入安裝流程,按照提示操作即可,過程簡單,略。

注意事項:安裝完成重啓進入系統時,用小鍵盤輸入 root 賬號的密碼可能會出錯。

2 網絡參數配置

2.1 配置 VMware 虛擬網絡

(1)從菜單欄依次進入:編輯虛擬網絡編輯器

(2)點擊開啓 更改設置,修改 VMnet8 的配置:

  • 選擇 類型NAT 模式
  • 取消 DHCP 服務,手動指定靜態 IP 地址
  • 設置 子網 IP,如:192.168.80.0
  • 設置 子網掩碼,如:255.255.255.0
  • 點擊進入 NAT 設置,設置 網關 IP,如:192.168.80.2;可根據需要,進入 DNS 設置 指定 DNS 服務器地址

2.2 配置 CentOS 網絡參數

(1)使用 ip addr 命令查看網卡信息。本案例中網卡名稱爲 ens33

(2)根據網卡名稱使用命令 vi /etc/sysconfig/network-scripts/ifcfg-ens33 打開網絡參數配置文件,按 i 進行編輯。

(3)修改配置文件的兩個參數值:

BOOTPROTO=static  ##使用靜態 IP
ONBOOT=yes  ##開機啓動網卡

(4)根據之前配置的參數值,在配置文件增加以下內容:

IPADDR=192.168.80.80   ##指定本機靜態 IP
NETMASK=255.255.255.0  ##子網掩碼
GATEWAY=192.168.80.2  ##網關 IP
DNS1=223.5.5.5
DNS2=223.6.6.6

(5)更改完後,按 ESC 鍵,然後輸入 :wq,退出並保存。

附加內容,vi 命令回顧:

:q!  不保存文件,強制退出 vi
:w  保存文件,但不退出 vi
:wq  保存文件,並退出 vi

(6)使用命令 service network restart 重啓網絡,可用 ping 命令測試是否配置成功。

2.3 配置本機虛擬網卡

要使用 SecureCRTPortable 連接虛擬機,要保證本機虛擬網卡 IP 地址與 VMware 虛擬網絡在同一網段:

(1)從任務欄依次進入:網絡和共享中心更改適配器設置VMnet8 Network Adapter,修改 IPv4 參數如下:

  • IP 地址:192.168.80.1
  • 子網掩碼:255.255.255.0
  • 默認網關: 192.168.80.2(該項取值實際上並不影響連接,只要 IP 所在網段正確即可)

(2)開啓 SecureCRTPortable,添加連接至 192.168.80.80 即可。

附加內容,如果 SecureCRTPortable 命令行出現亂碼,需要修改字符編碼:
從菜單欄依次進入:Options(選項)Session Options(會話選項)Terminal(終端)Appearance(外觀),在右側找到 Character encoding 選擇 UTF-8 即可。

3 創建普通用戶

(1)創建用戶,使用命令 adduser username

(2)爲用戶設置密碼,使用命令 passwd username

(3)授權 sudo 權限,需要修改 sudoers 文件:

  • 定位文件,使用命令 whereis sudoers,可知文件在 /etc/sudoers
  • 修改文件權限,默認爲只讀(若修改文件後使用 :wq! 直接覆蓋,則忽略該步驟)
ls -l /etc/sudoers 查看文件權限 
chmod -v u+w /etc/sudoers 修改文件權限爲可編輯
  • 修改文件,使用 vi /etc/sudoers 進入文件,按照 root 的格式增加以下內容:
root ALL=(ALL) ALL 
username ALL=(ALL) ALL
  • 還原文件的只讀權限(若修改文件後使用 :wq! 直接覆蓋,則忽略該步驟)
ls -l /etc/sudoers 查看文件權限 
chmod -v u-w /etc/sudoers 修改文件權限爲只讀

注意事項:安裝 JDK 和 Hadoop 均使用普通用戶進行。

附加內容,用戶切換:

  • 普通用戶切換爲 root 用戶,使用命令 su,輸入密碼後即可。
  • root 用戶切換爲普通用戶,使用命令 su 用戶名 即可。

4 配置主機名及其映射

4.1 修改默認主機名

使用命令:hostnamectl set-hostname node-1,設置主機名爲 node-1,修改後可用 hostname 命令查看結果:

[root@localhost ~]# hostname
node-1

要看到命令行變更,則需要重啓;如果是 SecureCRTPortable,重新連接即可看到效果:

[root@node-1 ~]# 

4.1 配置 IP 與主機名映射

使用命令 vi /etc/hosts 編輯 host 文件:

  • 僞分佈式要配置 192.168.80.80 與主機名 node-1 的映射,可增加以下內容:
192.168.80.80 node-1
  • 完全分佈式要配置 IP 與主機名的映射,可增加以下內容:
192.168.80.80 node-1
192.168.80.81 node-2
192.168.80.82 node-3

注意事項:多節點情況下,可使用 Send Chat to All Sessions 向全部節點發出指令,批量修改 hosts。

附加內容,向多個虛擬機發送相同命令:
從菜單欄進入 View(視圖),勾選 Chat Window,在底部窗口右鍵選擇 Send Chat to All Sessions

5 配置免密登錄

(1)使用命令 ssh-keygen -t rsa 生成 ssh 密鑰對,均使用默認選項即可,在 ~/.ssh 隱藏目錄下生成 id_rsa(私鑰)和 id_rsa.pub(公鑰)

(2)將公鑰複製到需要免密登錄的機器上。例如:執行 ssh-copy-id 192.168.220.11ssh-copy-id node-2

注意事項:在 node-1 使用 ssh node-1 連接自身也會提示需要輸入密碼,因此自身也複製一份,執行 ssh-copy-id node-1 即可。

6 關閉防火牆

使用命令 systemctl status firewalld 查看防火牆狀態,出現 Active: active (running) 說明防火牆開啓;出現 Active: inactive (dead) 說明防火牆關閉。可使用如下命令操作防火牆:

  • 臨時關閉防火牆:systemctl stop firewalld
  • 臨時開啓防火牆:systemctl start firewalld
  • 永久關閉防火牆:systemctl disable firewalld
  • 永久開啓防火牆:systemctl enable firewalld

注意事項:臨時關閉或開啓防火牆,當重啓時會回覆之前的狀態;永久開啓或關閉防火牆,重啓後生效。

7 安裝 JDK

(1)切換到普通用戶

(2)上傳 amazon-corretto-8.222.10.1-linux-x64.tar.gz~ 目錄

(3)在 home/username 目錄下新建 java 文件夾

(4)執行命令:tar zxvf amazon-corretto-8.222.10.1-linux-x64.tar.gz -C java/

(5)修改 /etc/profile 文件,在末尾添加內容後保存:

#set java environment
export JAVA_HOME=/home/username/java/amazon-corretto-8.222.10.1-linux-x64
export JRE_HOME=/home/username/java/amazon-corretto-8.222.10.1-linux-x64/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH

(5)使用命令:source /etc/profile,讓環境變量生效

(6)輸入命令:java -version,查看 JDK 是否安裝成功,如果安裝成功則顯示版本號信息:

openjdk version "1.8.0_222"
OpenJDK Runtime Environment Corretto-8.222.10.1 (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM Corretto-8.222.10.1 (build 25.222-b10, mixed mode)

8 安裝 Hadoop

(1)切換到普通用戶

(2)下載壓縮包:http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.2.0/

(3)上傳 hadoop-3.2.0.tar.gz~ 目錄

(4)在 home/username 目錄下新建 hadoop 文件夾

(5)執行命令:tar zxvf hadoop-3.2.0.tar.gz -C hadoop/

(6)修改 /etc/profile 文件,在末尾添加內容後保存:

# set hadoop and sbin path
export HADOOP_HOME=/home/username/hadoop/hadoop-3.2.0
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

(7)使用命令:source /etc/profile,讓環境變量生效

(8)輸入命令:hadoop version,查看是否安裝成功,如果安裝成功則顯示版本號信息:

Hadoop 3.2.0
Source code repository https://github.com/apache/hadoop.git -r e97acb3bd8f3befd27418996fa5d4b50bf2e17bf
Compiled by sunilg on 2019-01-08T06:08Z
Compiled with protoc 2.5.0
From source with checksum d3f0795ed0d9dc378e2c785d3668f39
This command was run using /opt/hadoop/hadoop-3.2.0/share/hadoop/common/hadoop-common-3.2.0.jar

僞分佈式的搭建

由於僞分佈式僅有一個節點,使用 192.168.80.80 一個虛擬機即可完成,完成公共部分的步驟後,再進行如下配置:

1 配置文件

需要配置的文件如下:

  • hadoop-3.2.0/etc/hadoop/hadoop-env.sh
  • hadoop-3.2.0/etc/hadoop/core-site.xml
  • hadoop-3.2.0/etc/hadoop/hdfs-site.xml
  • hadoop-3.2.0/etc/hadoop/mapred-site.xml
  • hadoop-3.2.0/etc/hadoop/yarn-site.xml
  • hadoop-3.2.0/etc/hadoop/workers

注意事項:配置文件中尖括號前後、單詞前後的不必要空格會導致啓動失敗!

1.1 hadoop-env.sh

在文件中找到以下內容,解開註釋,添加 JAVA_HOME 路徑:

# The java implementation to use. By default, this environment
# variable is REQUIRED on ALL platforms except OS X!
export JAVA_HOME=/home/username/java/amazon-corretto-8.222.10.1-linux-x64

1.2 core-site.xml

在該文件中添加如下內容:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://node-1:9000</value>
    </property>

    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop/tmp</value>
    </property>
</configuration>

(1)指定 Hadoop 所使用的文件系統以及 namenode 地址,使用 IP 地址或主機名均可

(2)指定 namenode 上本地的 hadoop 臨時文件夾

1.3 hdfs-site.xml

在該文件中添加如下內容:

<configuration> 
   <property>
       <name>dfs.replication</name>
       <value>1</value>
   </property>
</configuration>

指定 HDFS 副本個數,配置默認是 3,應小於 datanode 機器數量

1.4 mapred-site.xml

在該文件中添加如下內容:

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

指定 MapReduce 運行框架爲 yarn,默認爲 local

1.5 yarn-site.xml

在該文件中添加如下內容:

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node-1</value>
    </property>

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

(1)指定 resourcemanager 的地址,使用主機名

(2)nodemanager 運行的附屬服務,要配置成 mapreduce_shuffle,纔可以運行 MapReduce 程序默認值

1.6 workers

添加從節點。僞分佈式模式中,只有一個 node-1 節點:

node-1

注:Hadoop 3.0 以前的版本是 slaves 文件

2 啓動 Hadoop

2.1 格式化

啓動 Hadoop 集羣,需要分別啓動 HDFS 集羣和 Yarn 集羣。首次啓動前,HDFS 在物理上不存在,需要要進行格式化。使用以下命令:

hdfs namenode -format

注意事項:

  • 首次格式化之後,若集羣啓動成功,就不要再進行格式化
  • 如有必要(例如在管理界面 LiveNode 爲 0,datanode 日誌有異常時),應刪除 tmp 文件夾內容後,重新格式化
  • 格式化應在 namenode 所在節點進行。

2.2 啓動腳本

如果配置了免密登錄、workers 文件,則可以使用啓動腳本。在 /sbin 目錄下有四個腳本文件:start-dfs.shstop-dfs.shstart-yarn.shstop-yarn.sh,分別用於啓動或停止 HDFS 和 Yarn。

使用 start-dfs.shstart-yarn.sh 後,用 jps 命令查看進程,出現如下 6 個進程說明已經成功啓動:

8306 Jps
7300 NameNode
7972 NodeManager
7845 ResourceManager
7446 DataNode
7627 SecondaryNameNode

2.3 可視化界面

  • YARN NodeManager:http://192.168.80.80:9870

  • YARN ResourceManager:http://192.168.80.80:8088

附加內容:Hadoop 3.x 端口號與 2.x 的比較

分類 應用 Haddop 2.x port Haddop 3.x port
NNPorts Namenode 8020 9820
NNPorts NN HTTP UI 50070 9870
NNPorts NN HTTPS UI 50470 9871
SNN ports SNN HTTP 50091 9869
SNN ports SNN HTTP UI 50090 9868
DN ports DN IPC 50020 9867
DN ports DN 50010 9866
DN ports DN HTTP UI 50075 9864
DN ports Namenode 50475 9865

完全分佈式的搭建

以 3 個節點構成的集羣爲例,每個節點都需要完成公共部分的步驟。節點的部署如下表:

hostname IP NameNode DataNode SecondaryNameNode NodeManager ResourceManager
node-1 192.168.80.80
node-2 192.168.80.81
node-3 192.168.80.82

注意事項:

  • 各節點執行 JDK 安裝、Hadoop 安裝、格式化、文件下發、啓動或停止集羣的用戶名要相同
  • 各節點的 hosts 要相同
  • 各節點的 Hadoop 配置文件要相同
  • 配置 node-1 分別到 node-2、node-3 的免密登錄
  • 各節點要分別修改網絡參數、主機名
  • 由於 ResourceManager 部署在 node-3,因此需要配置 node-3 分別到 node-1、node-2 的免密登錄

1 同步時間

有手動同步和網絡授時兩種方式:

(1)手動同步
使用命令 date –s "2019-01-01 05:05:05"

(2)網絡授時
安裝插件 yum install ntpdate,安裝成功後可使用命令 ntpdate cn.pool.ntp.org 進行網絡授時。

2 配置文件

需要配置的文件如下:

  • hadoop-3.2.0/etc/hadoop/hadoop-env.sh
  • hadoop-3.2.0/etc/hadoop/core-site.xml
  • hadoop-3.2.0/etc/hadoop/hdfs-site.xml
  • hadoop-3.2.0/etc/hadoop/mapred-site.xml
  • hadoop-3.2.0/etc/hadoop/yarn-site.xml
  • hadoop-3.2.0/etc/hadoop/workers

注意事項:配置文件中尖括號前後、單詞前後的不必要空格會導致啓動失敗!

2.1 hadoop-env.sh(與僞分佈式相同)

在文件中找到以下內容,解開註釋,添加 JAVA_HOME 路徑:

# The java implementation to use. By default, this environment
# variable is REQUIRED on ALL platforms except OS X!
export JAVA_HOME=/home/username/java/amazon-corretto-8.222.10.1-linux-x64

2.2 core-site.xml(與僞分佈式相同)

在該文件中添加如下內容:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://node-1:9000</value>
    </property>

    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/username/hadoop/tmp</value>
    </property>
</configuration>

(1)指定 Hadoop 所使用的文件系統以及 namenode 地址,使用 IP 地址或主機名均可

(2)指定 namenode 上本地的 hadoop 臨時文件夾

2.3 hdfs-site.xml

在該文件中添加如下內容:

<configuration> 
   <property>
       <name>dfs.replication</name>
       <value>2</value>
   </property>

    <property>
       <name>dfs.namenode.name.dir</name>
       <value>/home/username/hadoop/name</value>
   </property>

   <property>
       <name>dfs.datanode.data.dir</name>
       <value>/home/username/hadoop/data</value>
   </property>

    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>node-2:9868</value>
   </property>
</configuration>

(1)指定 HDFS 副本個數,配置默認是 3,應小於 datanode 機器數量

(2)指定元數據存儲位置

(3)指定 datanode 存儲位置

(4)指定 SecondaryNameNode 地址,使用 IP 地址或主機名均可

2.4 mapred-site.xml(與僞分佈式相同)

在該文件中添加如下內容:

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

指定 MapReduce 運行框架爲 yarn,默認爲 local

2.5 yarn-site.xml

在該文件中添加如下內容:

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node-3</value>
    </property>

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

(1)指定 resourcemanager 的地址,使用主機名

(2)nodemanager 運行的附屬服務,要配置成 mapreduce_shuffle,纔可以運行 MapReduce 程序默認值

2.6 workers

添加從節點:

node-1
node-2
node-3

注:Hadoop 3.0 以前的版本是 slaves 文件

3 下發文件

可通過 scp 命令下發文件給其他節點,保持文件一致性。

(1)將 node-1 的 /home/username/hadoop/hadoop-3.2.0/etc 所有文件下發到 node-2 的對應位置,可在 node-1 執行如下命令:

scp -r /home/username/hadoop/hadoop-3.2.0/etc username@node-2:/home/username/hadoop/hadoop-3.2.0/etc

(2)將 node-1 的環境變量下發到 node-2 的對應位置,可在 node-1 執行如下命令:

scp -r /etc/profile username@node-2:/etc/profile

(3)將 node-1 的 hosts 下發到 node-2 的對應位置,可在 node-1 執行如下命令:

scp -r /etc/hosts username@node-2:/etc/hosts

4 啓動 Hadoop

4.1 格式化

啓動 Hadoop 集羣,需要分別啓動 HDFS 集羣和 Yarn 集羣。首次啓動前,HDFS 在物理上不存在,需要要進行格式化。使用以下命令:

hdfs namenode -format

注意事項:

  • 首次格式化之後,若集羣啓動成功,就不要再進行格式化
  • 如有必要(例如在管理界面 LiveNode 爲 0,datanode 日誌有異常時),應刪除 tmp 文件夾內容後,重新格式化
  • 格式化應在 namenode 所在節點進行。

4.2 啓動腳本

如果配置了免密登錄、workers 文件,則可以使用啓動腳本。在 /sbin 目錄下有四個腳本文件:start-dfs.shstop-dfs.shstart-yarn.shstop-yarn.sh,分別用於啓動或停止 HDFS 和 Yarn。

根據部署,在 node-1 使用 start-dfs.sh,在 node-3 使用 start-yarn.sh 後,用 jps 命令查看各節點進程如下:

[username@node-1 root]$ jps
7301 NameNode
7733 NodeManager
7446 DataNode
7847 Jps

[username@node-2 root]$ jps
7430 NodeManager
7543 Jps
7304 SecondaryNameNode
7225 DataNode

[username@node-3 root]$ jps
7209 DataNode
7385 ResourceManager
7849 Jps
7517 NodeManager

4.3 可視化界面

  • YARN NodeManager:http://192.168.80.80:9870

  • YARN ResourceManager:http://192.168.80.82:8088

其它

若以 root 身份登錄時,啓動集羣可能報如下錯誤:

[root@node-1 sbin]# ./start-all.sh
Starting namenodes on [node-1]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [node-2]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
Starting resourcemanager
ERROR: Attempting to operate on yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation.
Starting nodemanagers
ERROR: Attempting to operate on yarn nodemanager as root
ERROR: but there is no YARN_NODEMANAGER_USER defined. Aborting operation.

解決方案 1:

(1)在 start-dfs.shstop-dfs.sh 文件開頭添加以下參數:

HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

(2)在 start-yarn.shstop-yarn.sh 文件開頭添加以下參數:

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

解決方案 2:以非 root 身份登錄。

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