文章目錄
- 前言
- 虛擬機網路配置
- 一、虛擬機準備
- 1 可以正常上網
- 2 查看ip相關資訊
- 3 安裝必要的環境
- 4 關閉防火墻以及防火墻開機自啟動
- 5 修改主機名及添加映射
- 6 創建用戶
- 7 克隆另外兩臺虛擬機:hadoop102 hadoop103
- 7.1 克隆 hadoop102
- 7.2 更改 hadoop102 相關資訊
- 7.3 測驗三臺虛擬機是否可以相互通信
- 二、Hadoop安裝及相關配置
- 1 安裝 jdk、hadoop
- 2 配置環境變數
- 3 配置SSH無密登錄
- 4 集群配置
- 4.1 集群各節點的規劃
- 4.1 配置集群
- 4.2 分發 jdk 和 hadoop 到另外兩臺虛擬機
- 4.3 格式化NameNode
- 4.4 群起集群
- HDFS測驗
- Yarn測驗
- 總結
前言
必備條件:
- 電腦記憶體最好8G以上
- 虛擬機ip為靜態ip!!!且可以 ping 通外網!!!
提示:若滿足以上條件,下面案例可供參考
虛擬機網路配置
如果虛擬機不能ping通外網或者非靜態ip可以參考如下配置









注意:可能大家最后那個檔案不是 ifcfg-ens33,根據自己的情況選擇,如果是centos7.5版本的話,基本都是ifcfg-ens33檔案,一般打開這個檔案是有內容的,如果大家打開是空的,說明不是 ifcfg-ens33檔案,
修改BOOTPROTO,最后添加三行內容

修改完后重啟網路
[root@hadoop101 ~]# systemctl restart network
一、虛擬機準備
**注意:**最好切換到 root 用戶執行
1 可以正常上網
[root@hadoop101 ~]# ping www.baidu.com
PING www.wshifen.com (104.193.88.77) 56(84) bytes of data.
64 bytes from 104.193.88.77 (104.193.88.77): icmp_seq=1 ttl=128 time=209 ms
64 bytes from 104.193.88.77 (104.193.88.77): icmp_seq=2 ttl=128 time=209 ms
2 查看ip相關資訊
ifconfig查看ip資訊

我的虛擬機的 ip地址為192.168.1.101

3 安裝必要的環境
**注意:**最好切換到 root 用戶執行
[root@hadoop101 ~]# yum install -y epel-release
[root@hadoop101 ~]# yum install -y net-tools
[root@hadoop101 ~]# yum install -y vim
4 關閉防火墻以及防火墻開機自啟動
[root@hadoop101 ~]# systemctl stop firewalld
[root@hadoop101 ~]# systemctl disable firewalld
5 修改主機名及添加映射
我的主機名就是 hadoop101,主機名可以隨意設定
[root@hadoop101 ~]# vim /etc/hostname
hadoop101
添加映射,我的這臺虛擬機的 ip 地址為 192.168.1.101,另外兩臺虛擬機的 主機名和ip 地址我會分別設定為 hadoop102,192.168.1.102; hadoop103,192.168.1.103,
這里要注意:大家要根據自己的虛擬機的 ip 地址來設定,其他兩臺的虛擬機的最后三位不能和第一臺一樣,最好是疊加,如:101、102、103,這樣方便記憶與配置
[root@hadoop101 ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.101 hadoop101
192.168.1.102 hadoop102
192.168.1.103 hadoop103
在 win10中添加映射:打開C:\Windows\System32\drivers\etc路徑下的 hosts 檔案,在末尾加入如下內容
192.168.1.101 hadoop101
192.168.1.102 hadoop102
192.168.1.103 hadoop103
在win10中配置映射并不是必須要配置,配置這個主要是為了將 ip 地址和用戶名在 win10 主機上做一個映射,不配也行,建議還是配置一下,
6 創建用戶
-
我這里創建一個 bigdata 用戶,大家隨意,然后給用戶設定密碼
[root@hadoop101 ~]# useradd bigdata
[root@hadoop101 ~]# passwd bigdata -
配置 bigdata 用戶具有 root 權限,方便后期加 sudo 執行 root 權限的命令,這樣就可以不用切換到 root 用戶來執行了
編輯 /etc/sudoers檔案,添加兩行內容[root@hadoop101 ~]# vim /etc/sudoers ## Allow root to run any commands anywhere root ALL=(ALL) ALL # 添加如下兩行內容 %wheel ALL=(ALL) ALL bigdata ALL=(ALL) NOPASSWD:ALL -
創建 /opt/app 和 /opt/software檔案夾
app:用來存放解壓后的 jar 包
software:用來存放 jar 包[root@hadoop101 ~]# mkdir /opt/app [root@hadoop101 ~]# mkdir /opt/software -
修改并查看 app 和 software檔案權限
[root@hadoop101 ~]# chown bigdata:bigdata /opt/app [root@hadoop102 ~]# chown bigdata:bigdata /opt/software [root@hadoop101 opt]# ll /opt/ 總用量 0 drwxr-xr-x. 2 bigdata bigdata 6 3月 1 22:50 app drwxr-xr-x. 2 bigdata bigdata 6 1月 28 21:48 software -
卸載自帶的 JDK
[root@hadoop101 ~]# rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps -
重啟虛擬機
[root@hadoop101 ~]# reboot
7 克隆另外兩臺虛擬機:hadoop102 hadoop103
7.1 克隆 hadoop102

克隆時,應該關閉 hadoop101

點擊克隆后一直點下一步,直到下面圖片

創建虛擬機名稱和存放地址

克隆完成

7.2 更改 hadoop102 相關資訊
-
使用 root 用戶登錄
-
將主機名修改為 hadoop102
[root@hadoop101 ~]# vim /etc/hostname hadoop102 -
查看一下主機映射(hadoop101已經配置過了,克隆過來也是配置好了的)
[root@hadoop101 ~]# vim /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.101 hadoop101 192.168.1.102 hadoop102 192.168.1.103 hadoop103 -
將 hadoop102 的ip地址修改為 192.168.1.102
[root@hadoop101 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
將 IPADDR 改為 192.168.1.102 即可

注意: 這里不要生搬硬套,因為我的 hadoop101 的ip地址為 192.168.1.101,所以我才將 hadoop102 的ip地址改為 192.168.1.102,大家根據自己第一臺虛擬機的靜態ip來更改
-
修改完后保存退出,reboot 重啟
-
重啟后可以看到用戶名更改為 hadoop102,并且可以上網
Last login: Mon Mar 1 23:32:44 2021 [root@hadoop102 ~]# ping www.baidu.com PING www.a.shifen.com (220.181.38.149) 56(84) bytes of data. 64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq=1 ttl=128 time=37.5 ms -
查看 ip資訊

我們發現 hadoop102 的ip地址變為 192.168.1.102 -
至此,hadoop102 就克隆完畢
-
同理,第三臺虛擬機 hadoop103也是如此操作
7.3 測驗三臺虛擬機是否可以相互通信
測驗 hadoop101 與其他兩臺虛擬機之間能否相互通信
[bigdata@hadoop101 opt]$ ping hadoop101
PING hadoop101 (192.168.1.101) 56(84) bytes of data.
64 bytes from hadoop101 (192.168.1.101): icmp_seq=1 ttl=64 time=0.033 ms
[bigdata@hadoop101 opt]$ ping hadoop102
PING hadoop102 (192.168.1.102) 56(84) bytes of data.
64 bytes from hadoop102 (192.168.1.102): icmp_seq=1 ttl=64 time=0.522 ms
[bigdata@hadoop101 opt]$ ping hadoop103
PING hadoop103 (192.168.1.103) 56(84) bytes of data.
64 bytes from hadoop103 (192.168.1.103): icmp_seq=1 ttl=64 time=0.487 ms
我們可以看到 hadoop101 可以與其他兩臺虛擬機相互通信,同理測驗hadoop102、hadoop103 各自能否與其他兩臺虛擬機相互通信,
二、Hadoop安裝及相關配置
1 安裝 jdk、hadoop
-
使用 Xshell 或者 SecureCRT 用**bigdata(你自己創建的用戶)**登錄到三臺虛擬機,
-
在 hadoop101(第一臺虛擬機)進入到 /opt/software 目錄,將 jdk 和 hadoop jar包上傳到該目錄
[bigdata@hadoop101 ~]$ cd /opt/software/上傳完畢后查看一下
[bigdata@hadoop101 software]$ ll 總用量 520600 -rw-r--r--. 1 bigdata bigdata 338075860 2月 24 09:00 hadoop-3.1.3.tar.gz -rw-r--r--. 1 bigdata bigdata 195013152 2月 24 09:09 jdk-8u212-linux-x64.tar.gz -
解壓 jdk 和 hadoop jar包
[bigdata@hadoop101 software]$ tar -zxvf jdk-8u121-linux-x64.tar.gz -C /opt/app/ [bigdata@hadoop101 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/app/ -
到 /opt/app 目錄查看解壓后的 jar 包
[bigdata@hadoop101 software]$ cd /opt/app/ [bigdata@hadoop101 app]$ ll 總用量 0 drwxr-xr-x. 9 bigdata bigdata 149 9月 12 2019 hadoop-3.1.3 drwxr-xr-x. 7 bigdata bigdata 245 4月 2 2019 jdk1.8.0_212
2 配置環境變數
[bigdata@hadoop101 app]$ sudo vim /etc/profile.d/my_env.sh
分別進入 jdk 和 hadoop 安裝目錄并查看各自的路徑
[bigdata@hadoop101 app]$ cd /opt/app/jdk1.8.0_212/
[bigdata@hadoop101 jdk1.8.0_212]$ pwd
/opt/app/jdk1.8.0_212
[bigdata@hadoop101 jdk1.8.0_212]$ cd ../hadoop-3.1.3/
[bigdata@hadoop101 hadoop-3.1.3]$ pwd
/opt/app/hadoop-3.1.3
在 /etc/profile.d/ 目錄下創建一個檔案,根據剛才查看到的路徑撰寫檔案,配置 JAVA_HOME 和 HADOOP_HOME
[bigdata@hadoop101 hadoop-3.1.3]$ sudo vim /etc/profile.d/my_env.sh
#JAVA_HOME
export JAVA_HOME=/opt/app/jdk1.8.0_212
export PATH=$JAVA_HOME/bin:$PATH
#HADOOP_HOME
export HADOOP_HOME=/opt/app/hadoop-3.1.3
export PATH=$HADOOP_HOME/bin:$PATH
export PATH=$HADOOP_HOME/sbin:$PATH
撰寫完后后,保存退出,source 一下,讓環境變數生效
[bigdata@hadoop101 hadoop-3.1.3]$ source /etc/profile.d/my_env.sh
驗證環境變數是否生效,輸入 java -version 和 hadoop version,若列印出版本資訊表示環境變數已經配置完成
[bigdata@hadoop101 hadoop-3.1.3]$ java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
[bigdata@hadoop101 hadoop-3.1.3]$ hadoop version
Hadoop 3.1.3
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r ba631c436b806728f8ec2f54ab1e289526c90579
Compiled by ztang on 2019-09-12T02:47Z
Compiled with protoc 2.5.0
From source with checksum ec785077c385118ac91aadde5ec9799
This command was run using /opt/app/hadoop-3.1.3/share/hadoop/common/hadoop-common-3.1.3.jar
3 配置SSH無密登錄
一般我們使用 ssh 登錄到其他機器需要輸入密碼,如從 hadoop101 登錄到 hadoop102 程序如下:
配置免密登錄后,就不需要密碼了,感興趣可以看看原理,這里不解釋了
這里僅需配置 hadoop101(你的第一臺虛擬機)的 bigdata 用戶到其他兩臺虛擬機的免密登錄,為什么只需要配置 hadoop101呢?因為我是把 hadoop101 用戶當做集群的主節點(Master),其他兩臺是從節點,步驟如下
[bigdata@hadoop101 ~]$ ssh-keygen -t rsa
敲三下回車,結果如下,會生成 id_rsa(私鑰)和 id_rsa.pub(公鑰)

將公鑰拷貝到要免密登錄的目標機器上(注意 hadoop101 也要配置到自己的免密登錄)
[bigdata@hadoop101 ~]$ ssh-copy-id hadoop101
[bigdata@hadoop101 ~]$ ssh-copy-id hadoop102
[bigdata@hadoop101 ~]$ ssh-copy-id hadoop103
配置完后,我們測驗一下從 hadoop101 登錄到 hadoop103 上還需要密碼不
[bigdata@hadoop101 ~]$ ssh hadoop103
Last login: Mon Mar 1 23:47:30 2021
[bigdata@hadoop103 ~]$
[bigdata@hadoop103 ~]$ exit
登出
Connection to hadoop103 closed.
[bigdata@hadoop101 ~]$
同理要配置hadoop102、hadoop103分別到另外兩臺虛擬機的免密登錄
4 集群配置
4.1 集群各節點的規劃
| hadoop101 | hadoop102 | hadoop103 | |
|---|---|---|---|
| HDFS | NameNode | SecondaryNameNode | |
| HDFS | DataNode | DataNode | DataNode |
| Yarn | ResourceManager | ||
| Yarn | NodeManager | NodeManager | NodeManager |
4.1 配置集群
進入到組態檔目錄,這里一定要注意要先按 i 進入編輯模式再粘貼,否則會少內容
[bigdata@hadoop101 ~]$ cd $HADOOP_HOME/etc/hadoop
[bigdata@hadoop101 hadoop]$ vim core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:8020</value>
</property>
<!-- 資料存放目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/app/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS網頁登錄使用的靜態用戶為bigdata -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>bigdata</value>
</property>
</configuration>
[bigdata@hadoop101 hadoop]$ vim hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- NameNode web端訪問地址 -->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop101:9870</value>
</property>
<!-- SecondaryNameNode web端訪問地址 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop103:9868</value>
</property>
</configuration>
[bigdata@hadoop101 hadoop]$ vim yarn-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定MR執行shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop102</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>
[bigdata@hadoop101 hadoop]$ vim mapred-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定MapReduce程式運行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
配置 workers 檔案時的注意事項:
- hadoop版本3.0以下的應該編輯檔案 slaves
- workers檔案中不能出現空格和多余的行
[bigdata@hadoop101 hadoop]$ vim workers
hadoop101
hadoop102
hadoop103
至此 hadoop 一些基本的配置資訊完成了,其實還有很多配置資訊用的都是默認的,可以自己去官網查看并配置,
4.2 分發 jdk 和 hadoop 到另外兩臺虛擬機
分發的時候要注意:另外兩臺機器要有 /opt/app 檔案夾,使用bigdata(你自己創建的那個用戶)分發
[bigdata@hadoop101 hadoop]$ rsync -av /opt/app/ bigdata@hadoop102:/opt/app/
[bigdata@hadoop101 hadoop]$ rsync -av /opt/app/ bigdata@hadoop103:/opt/app/
分發完成后可以查看一下相應的目錄中是否有 jdk 和 hadoop
[bigdata@hadoop102 ~]$ ll /opt/app/
drwxr-xr-x. 9 bigdata bigdata 149 9月 12 2019 hadoop-3.1.3
drwxr-xr-x. 7 bigdata bigdata 245 4月 2 2019 jdk1.8.0_212
[bigdata@hadoop103 ~]$ ll /opt/app/
drwxr-xr-x. 9 bigdata bigdata 149 9月 12 2019 hadoop-3.1.3
drwxr-xr-x. 7 bigdata bigdata 245 4月 2 2019 jdk1.8.0_212
最后別忘記在另外兩臺虛擬機上編輯環境變數(將hadoop101中/etc/profile.d/my_env.sh的內容拷貝過去即可)
[bigdata@hadoop102 ~]$ sudo vim /etc/profile.d/my_env.sh
#JAVA_HOME
export JAVA_HOME=/opt/app/jdk1.8.0_212
export PATH=$JAVA_HOME/bin:$PATH
#HADOOP_HOME
export HADOOP_HOME=/opt/app/hadoop-3.1.3
export PATH=$HADOOP_HOME/bin:$PATH
export PATH=$HADOOP_HOME/sbin:$PATH
最后別忘記 source 一下,并查看環境變數是否生效
[bigdata@hadoop102 ~]$ source /etc/profile.d/my_env.sh
[bigdata@hadoop102 ~]$ java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
[bigdata@hadoop102 ~]$ hadoop version
Hadoop 3.1.3
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r ba631c436b806728f8ec2f54ab1e289526c90579
Compiled by ztang on 2019-09-12T02:47Z
Compiled with protoc 2.5.0
From source with checksum ec785077c385118ac91aadde5ec9799
This command was run using /opt/app/hadoop-3.1.3/share/hadoop/common/hadoop-common-3.1.3.jar
另外一臺機器也要拷貝一下環境變數,這里我就不做演示了
4.3 格式化NameNode
格式化注意事項!!!!!!!!!!!!!!!!
- 用你的集群中的主機點(Master)即 NameNode所在節點進行格式化,我這里是 hadoop101,大家自己對應
- 只能格式化一次!!!!!
- 如果格式化1次以上,先進入到 hadoop 安裝目錄,然后洗掉 logs 和 data檔案(三臺虛擬機都要洗掉),洗掉后在重新格式化,(另外一種解決辦法是修改集群Cluster ID使他們保持一致,可以自己去網上參考一下,這里不再展示)

開始格式化
[bigdata@hadoop101 ~]$ hdfs namenode -format
如果看到以下資訊說明格式化成功

4.4 群起集群
HDFS測驗
注意:群起集群的前提條件是配置了 ssh 免密登錄,否則只能一臺機器一臺機器的啟動,
在主節點(Master),我這里是hadoop101啟動 HDFS
[bigdata@hadoop101 ~]$ start-dfs.sh
Starting namenodes on [hadoop101]
Starting datanodes
hadoop102: WARNING: /opt/app/hadoop-3.1.3/logs does not exist. Creating.
hadoop103: WARNING: /opt/app/hadoop-3.1.3/logs does not exist. Creating.
Starting secondary namenodes [hadoop103]
在各個虛擬機上執行 jps 查看相應的行程
[bigdata@hadoop101 ~]$ jps
4928 DataNode
5625 Jps
4766 NameNode
[bigdata@hadoop102 ~]$ jps
4630 Jps
4359 DataNode
[bigdata@hadoop103 ~]$ jps
3665 Jps
3238 DataNode
3324 SecondaryNameNode
查看行程后發現沒有問題
啟動后就可以到 Web界面,輸入你的主機點IP+9870埠號即可訪問

如果你在 win10 配置了主機映射,可以通過主機名訪問如 hadoop101:9870

我們上傳一個檔案看看HDFS是否能真正的作業
[bigdata@hadoop101 hadoop-3.1.3]$ echo b >> b.txt
[bigdata@hadoop101 hadoop-3.1.3]$ hadoop fs -mkdir /input
[bigdata@hadoop101 hadoop-3.1.3]$ hadoop fs -put b.txt /input
去web界面查看一下

Yarn測驗
在配置了ResourceManager的節點上(我這里是hadoop102)執行 start-yarn.sh命令
[bigdata@hadoop102 ~]$ start-yarn.sh
Starting resourcemanager
Starting nodemanagers
查看各個虛擬機的行程
[bigdata@hadoop101 ~]$ jps
4928 DataNode
6043 Jps
5884 NodeManager
4766 NameNode
[bigdata@hadoop102 ~]$ jps
4816 Jps
4707 NodeManager
4359 DataNode
5486 ResourceManager
[bigdata@hadoop103 ~]$ jps
3238 DataNode
3754 NodeManager
3324 SecondaryNameNode
3869 Jps
訪問一下web界面,我這里是 192.168.1.102:8088,如果win10配置了主機映射 hadoop102:8080也可以訪問,注意:因為ResourceManager配置在hadoop102,所以應該用hadoop102的ip+埠號訪問,大家自己對應

Mr on Yarn測驗
在hadoop101上創建一個測驗檔案,放入到/input2中
[bigdata@hadoop101 ~]$ vim test.txt
a b c
b c
c
[bigdata@hadoop101 ~]$ hadoop fs -mkdir /input2
[bigdata@hadoop101 ~]$ hadoop fs -put test.txt /input2
跑一個wordcount程式測驗一下,該程式負責統計 /input2中各個檔案的單詞數,結果輸入到/output中,注意:/output目錄不能存在,否則報錯
[bigdata@hadoop101 ~]$ hadoop jar /opt/app/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input2 /output
可以看到任務完成了

去HDFS web界面查看一下結果
進入 /output 目錄,查看一下結果檔案

總結
本文先從虛擬機的準備開始,然后講了 Hadoop 的基本安裝程序,遇到錯誤是很正常的,需要自己查看報錯資訊,并解決,希望大家都能踩過這個坑,內容方面如若有誤,請大家多多指正,相互學習,相互進步!轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/265880.html
標籤:其他
上一篇:四十四、Kafka的架構
