記一次Hadoop安裝部署過程
阿新 • • 發佈:2021-01-07
# 實驗名稱:Hadoop安裝部署
## 一、實驗環境:
### 虛擬機器數量:3個 (1個master,2個slave:slave01,slave02)
### 主節點master資訊:
+ 作業系統:CentOS7.5
+ 軟體包位置:/home/zkpk/tgz
+ 資料包位置:/home/zkpk/experiment
+ 已安裝軟體:無
### 從節點slave01資訊:
+ 作業系統:CentOS7.5
+ 軟體包位置:/home/zkpk/tgz
+ 資料包位置:/home/zkpk/experiment
+ 已安裝軟體:無
### 從節點slave02資訊:
+ 作業系統:CentOS7.5
+ 軟體包位置:/home/zkpk/tgz
+ 資料包位置:/home/zkpk/experiment
+ 已安裝軟體:無
## 二、實驗目的:
+ 掌握 linux系統基礎
+ 熟悉hadoop操作指令
+ 掌握配置叢集節點間免密登入
+ 掌握配置JDK
+ 掌握配置部署hadoop的步驟和配置相關環境檔案
## 三、實驗要求:
獨立完成hadoop的安裝部署。
## 四、實驗內容:
在若干節點中,安裝部署hadoop分散式叢集,並會啟動叢集以及使用 Web
UI檢視叢集是否成功啟動;在搭建好的hadoop分散式叢集中執行PI例項檢查叢集是否成功;
實驗內容流程圖如下。
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107140437081-1860668066.png)
## 五、實驗步驟:
### 1 登入大資料實驗平臺,進入實驗,(介面顯示為master、slave01、slave02)
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107140550011-382295972.png)
### 2 確保各臺虛擬機器能ping通外網(上圖介面中master、slave01、slave02,分別對應一個虛擬機器,隨後簡稱為“介面各虛擬機器”)
#### 2.1 在桌面空白處右擊滑鼠,開啟一個終端(下圖根據centos7所使用的桌面系統不同會稍有區別,一般使用gnome或xfce)
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107140604673-121083826.png)
#### 2.2ping一個外網網址,確保能夠ping通,ctrl+c結束ping命令的執行(大資料實驗室提供的虛擬機器預設已可ping通外網)
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107140628005-1848675603.png)
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107140641553-560148844.png)
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107140658540-537324680.png)
### 3 配置主機名(“介面各虛擬機器”分別操作此步驟,主機名分別設定為master, slave01,slave02)
說明:此處以介面虛擬機器master的操作為例(預設已經配置好主機名稱)
#### 3.1 以下操作需要root許可權,所以先切換成root使用者
`[zkpk@localhost ~]$ su root`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107140718709-866228764.png)
#### 3.2 使用gedit編輯主機名(或使用vim)
##### 3.2.1 編輯主機名檔案
`[root@localhost ~]# gedit /etc/hostname`
##### 3.2.2 將原來內容替換為master
`master`
##### 3.2.3 儲存並退出
##### 3.2.4 臨時設定主機名為master:
`[root@localhost ~]# hostname master`
##### 3.2.5 檢測主機名是否修改成功:
說明:bash命令讓上一步操作生效
```
[root@localhost zkpk]# bash
[root@master zkpk]# hostname
master
```
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107140741579-345478766.png)
### 4 配置時鐘同步(使用root許可權;“介面各虛擬機器”分別操作此步驟;若已配置過,請忽略此步驟)
說明:此處以master節點的操作為例
#### 4.1 配置自動時鐘同步
##### 4.1.1使用Linux命令配置
`[root@master zkpk]# crontab -e`
##### 4.1.2 按”i ”鍵,進入插入模式;輸入下面的內容(星號之間和前後都有空格)
`0 1 * * * /usr/sbin/ntpdate cn.pool.ntp.org`
##### 4.1.3 按Esc退出插入模式,然後按”: ”鍵,輸入wq儲存退出
#### 4.2 手動同步時間,直接在Terminal執行下面的命令:
`[root@master zkpk]# /usr/sbin/ntpdate cn.pool.ntp.org`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107140758303-1844479263.png)
### 5 關閉防火牆(使用root許可權;“介面各虛擬機器”分別操作此步驟;若已配置過,請忽略此步驟)
#### 5.1 檢視防火牆狀態(預設已經關閉防火牆)
`[root@master ~]# systemctl status firewalld.service`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107161749225-2111341146.png)
#### 5.2 在終端中執行下面命令:
說明:兩條命令分別是臨時關閉防火牆和禁止開機啟動防火牆
```
[root@master ~]# systemctl stop firewalld.service
[root@master ~]# systemctl disable firewalld.service
```
### 6 配置hosts列表(使用root許可權;“介面各虛擬機器”分別操作此步驟;預設已經配置)
#### 6.1 先分別在各虛擬機器中執行ifconfig命令,獲得當前節點的ip地址,如下圖是master的ip地址
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107161812253-197015010.png)
#### 6.2 編輯主機名列表檔案:
`[root@master zkpk]# vi /etc/hosts`
#### 6.3 將下面三行新增到/etc/hosts檔案中,儲存退出:
注意:
這裡master節點對應IP地址是10.42.0.93,slave01對應的IP是10.42.0.94,slave02對應的IP是10.42.0.95,而自己在做配置時,需要將IP地址改成自己的master、slave01和slave02對應的IP地址。
```
10.42.0.93 master
10.42.0.94 slave01
10.42.0.95 slave02
```
#### 6.4 Ping主機名
```
[root@master ~]# ping master -c 3
[root@master ~]# ping slave01 -c 3
[root@master ~]# ping slave02 -c 3
```
注意:引數-c 3表示之返回三行響應就中止。
#### 6.5 如果出現下圖的資訊表示配置成功:
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107161829113-1373952648.png)
### 7 免金鑰登入配置(注意:使用zkpk使用者)
#### 7.1 master節點上
##### 7.1.1 先從root使用者,退回到普通使用者zkpk
```
[root@master ~]# su zkpk
[zkpk@master ~]$
```
##### 7.1.2 在終端生成金鑰,命令如下(一路按回車完成金鑰生成)
`[zkpk@master ~]$ ssh-keygen -t rsa`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107161859082-1359092.png)
##### 7.1.3 生成的金鑰在使用者根目錄中的.ssh子目錄中,進入.ssh目錄,如下圖操作:
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107161909062-844360048.png)
##### 7.1.4 進行復制公鑰檔案
`[zkpk@master .ssh]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys`
##### 7.1.5 執行ls -l命令後會看到下圖的檔案列表:
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107161919668-381008173.png)
##### 7.1.6 修改authorized_keys檔案的許可權,命令如下:
`[zkpk@master .ssh]$ chmod 600 ~/.ssh/authorized_keys`
##### 7.1.7 將專用金鑰新增到 ssh-agent 的快取記憶體中
`[zkpk@master .ssh]$ ssh-add ~/.ssh/id_rsa`
##### 7.1.8 將authorized_keys檔案複製到slave01、slave02節點zkpk使用者的根目錄,命令如下:
說明:如果提示輸入yes/no的時候,輸入yes,回車。密碼是:zkpk
```
[zkpk@master .ssh]$ scp ~/.ssh/authorized_keys zkpk@slave01:~/
[zkpk@master .ssh]$ scp ~/.ssh/authorized_keys zkpk@slave02:~/
```
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107161935123-230848868.png)
#### 7.2 slave01節點
##### 7.2.1 先從root使用者,退回到普通使用者zkpk,
`[root@slave01 ~]# su zkpk`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107161947470-1426525007.png)
然後在終端生成金鑰,命令如下(一路點選回車生成金鑰)
`[zkpk@slave01 ~]$ ssh-keygen -t rsa`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162000960-1457137708.png)
##### 7.2.2 將authorized_keys檔案移動到.ssh目錄
`[zkpk@slave01 ~]$ mv authorized_keys ~/.ssh/`
#### 7.3 slave02節點
##### 7.3.1 在終端生成金鑰,命令如下(一路點選回車生成金鑰)
`[zkpk@slave02 ~]$ ssh-keygen -t rsa`
##### 7.3.2 將authorized_keys檔案移動到.ssh目錄
`[zkpk@slave02 ~]$ mv authorized_keys ~/.ssh/`
#### 7.4 驗證免金鑰登陸
##### 7.4.1 在master機器上遠端登入slave01:
`[zkpk@master ~]$ ssh slave01`
##### 7.4.2 如果出現下圖的內容表示免金鑰配置成功:
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162017514-396896714.png)
##### 7.4.3 退出slave01遠端登入
```
[zkpk@slave01 ~]$ exit
[zkpk@master ~]$
```
##### 7.4.4 在master機器上遠端登入slave02:
`[zkpk@master ~]$ ssh slave02`
##### 7.4.5 如果出現下圖的內容表示免金鑰配置成功:
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162028948-478741381.png)
### 8 安裝JDK
注意:在三臺節點master,slave01,slave02上分別操作此步驟
#### 8.1 刪除系統自帶的jdk(如若出現下圖效果,說明系統自帶java,需要先解除安裝)
##### 8.1.1 檢視系統自帶jdk
`[zkpk@master ~]$ rpm -qa | grep java`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162041326-933057172.png)
在slave01上執行:
`[zkpk@slave01 ~]$ rpm -qa | grep java`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162050010-1482666175.png)
在slave02上執行:
`[zkpk@slave02 ~]$ rpm -qa | grep java`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162102799-48284126.png)
##### 8.1.2 切換root使用者
`[zkpk@master ~]$ su root`
在slave01上執行:
`[zkpk@slave01 ~]$ su root`
在slave02上執行:
`[zkpk@slave02 ~]$ su root`
##### 8.1.3 移除系統自帶的jdk
`[root@master zkpk]# yum remove java-1.*`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162128295-622063418.png)
在slave01上執行:
`[root@slave01 zkpk]# yum remove java-1.*`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162203093-1571561400.png)
在slave02上執行:
`[root@slave02 zkpk]# yum remove java-1.*`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162245246-1778364897.png)
##### 8.1.4 建立存放jdk檔案目錄
`[root@master zkpk]# mkdir /usr/java`
在slave01上執行:
`[root@slave01 zkpk] # mkdir /usr/java`
在slave02上執行:
`[root@slave02 zkpk] # mkdir /usr/java`
#### 8.2 將/home/zkpk/tgz下的JDK壓縮包解壓到/usr/java目錄下
`[root@master zkpk]# tar -xzvf /home/zkpk/tgz/jdk-8u131-linux-x64.tar.gz -C /usr/java`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162324908-301678504.png)
在slave01上執行:
`[root@slave01 zkpk]# tar -xzvf /home/zkpk/tgz/jdk-8u131-linux-x64.tar.gz -C /usr/java`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162341011-304558801.png)
在slave02上執行:
`[root@slave02 zkpk]# tar -xzvf /home/zkpk/tgz/jdk-8u131-linux-x64.tar.gz -C /usr/java`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162401569-1488207484.png)
##### 8.2.1 退出root使用者
`[root@master zkpk]# exit`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162414746-1367878298.png)
在slave01上執行:
`[root@slave01 zkpk]# exit`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162426118-1148952146.png)
在slave02上執行:
`[root@slave02 zkpk]# exit`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162436604-37475506.png)
#### 8.3 配置zkpk使用者環境變數
##### 8.3.1 使用gedit修改“.bash_profile”
`[zkpk@master ~]$ gedit /home/zkpk/.bash_profile`
##### 8.3.2 複製貼上以下內容新增到到上面gedit開啟的檔案中:
```
export JAVA_HOME=/usr/java/jdk1.8.0_131/
export PATH=$JAVA_HOME/bin:$PATH
```
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162500031-1468167243.png)
在slave01上執行:
`[zkpk@slave01 ~]$ gedit /home/zkpk/.bash_profile`
複製貼上以下內容新增到到上面gedit開啟的檔案中:
```
export JAVA_HOME=/usr/java/jdk1.8.0_131/
export PATH=$JAVA_HOME/bin:$PATH
```
在slave02上執行:
`[zkpk@slave02 ~]$ gedit /home/zkpk/.bash_profile`
複製貼上以下內容新增到到上面gedit開啟的檔案中:
```
export JAVA_HOME=/usr/java/jdk1.8.0_131/
export PATH=$JAVA_HOME/bin:$PATH
```
#### 8.4 使環境變數生效:
`[zkpk@master ~]$ source /home/zkpk/.bash_profile`
在slave01上執行:
`[zkpk@slave01 ~]$ source /home/zkpk/.bash_profile`
在slave02上執行:
`[zkpk@slave02 ~]$ source /home/zkpk/.bash_profile`
#### 8.5 檢視java是否配置成功:
`[zkpk@master ~]$ java -version`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162522284-1807101051.png)
### 9 安裝部署Hadoop叢集(zkpk使用者)
說明:每個節點上的Hadoop配置基本相同,在master節點操作,然後複製到slave01、slave02兩個節點。
#### 9.1 將/home/zkpk/tgz/hadoop目錄下的Hadoop壓縮包解壓到/home/zkpk目錄下
`[zkpk@master ~]$ tar -xzvf /home/zkpk/tgz/hadoop-2.7.3.tar.gz -C /home/zkpk`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162544414-195485431.png)
#### 9.2 配置hadoop-env.sh檔案
##### 9.2.1 使用gedit命令修改hadoop-env.sh檔案
`[zkpk@master ~]$ gedit /home/zkpk/hadoop-2.7.3/etc/hadoop/hadoop-env.sh`
##### 9.2.2 修改JAVA_HOME環境變數
`export JAVA_HOME=/usr/java/jdk1.8.0_131/`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162607159-719207700.png)
#### 9.3 配置yarn-env.sh檔案
##### 9.3.1 使用gedit命令修改yarn-env.sh檔案
`[zkpk@master ~]$ gedit ~/hadoop-2.7.3/etc/hadoop/yarn-env.sh`
##### 9.3.2 修改JAVA_HOME環境變數
`export JAVA_HOME=/usr/java/jdk1.8.0_131/`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162624061-890065528.png)
#### 9.4 配置core-site.xml 檔案
##### 9.4.1 使用gedit命令修改core-site.xml檔案
`[zkpk@master ~]$ gedit ~/hadoop-2.7.3/etc/hadoop/core-site.xml`
##### 9.4.2 用下面的程式碼替換core-site.xml中的內容:
```
```
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162639146-350573408.png)
#### 9.5 配置hdfs-site.xml檔案
##### 9.5.1 使用gedit命令修改hdfs-site.xml檔案
`[zkpk@master ~]$ gedit ~/hadoop-2.7.3/etc/hadoop/hdfs-site.xml`
##### 9.5.2 用下面的程式碼替換hdfs-site.xml中的內容:
```
```
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162655643-303311176.png)
#### 9.6 配置yarn-site.xml檔案
##### 9.6.1 使用gedit命令修改yarn-site.xml檔案
`[zkpk@master ~]$ gedit ~/hadoop-2.7.3/etc/hadoop/yarn-site.xml`
##### 9.6.2 用下面的程式碼替換yarn-site.xml中的內容:
```
```
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162735053-808015255.png)
#### 9.7 配置mapred-site.xml檔案
##### 9.7.1 複製mapred-site-template.xml檔案:
`[zkpk@master ~]$ cp ~/hadoop-2.7.3/etc/hadoop/mapred-site.xml.template ~/hadoop-2.7.3/etc/hadoop/mapred-site.xml`
##### 9.7.2 使用gedit編輯mapred-site.xml檔案:
`[zkpk@master ~]$ gedit ~/hadoop-2.7.3/etc/hadoop/mapred-site.xml`
##### 9.7.3 用下面的程式碼替換mapred-site.xml中的內容
```
```
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162751029-627720608.png)
#### 9.8 配置slaves檔案
##### 9.8.1 使用gedit編輯slaves檔案:
`[zkpk@master ~]$ gedit ~/hadoop-2.7.3/etc/hadoop/slaves`
##### 9.8.2 將slaves檔案中的內容用如下程式碼替換
```
slave01
slave02
```
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162814258-681013699.png)
#### 9.9 建立Hadoop資料目錄
```
[zkpk@master ~]$ cd
[zkpk@master ~]$ mkdir hadoopdata
```
#### 9.10 將配置好的hadoop資料夾複製到從節點
##### 9.10.1 使用scp命令將資料夾複製到slave01、slave02上:
說明:因為之前已經配置了免金鑰登入,這裡可以直接免金鑰遠端複製。
```
[zkpk@master ~]$ scp -r hadoop-2.7.3 zkpk@slave01:~/
[zkpk@master ~]$ scp -r hadoop-2.7.3 zkpk@slave02:~/
```
複製完成後,可以在slave01和slave02上檢驗是否複製成功。
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162840614-1036209440.png)
### 10 配置Hadoop環境變數
注意:在三臺節點分別操作此步驟,使用zkpk使用者許可權
#### 10.1 以master節點為例
`[zkpk@master ~]$ gedit ~/.bash_profile`
#### 10.2 在.bash_profile末尾新增如下內容:
```
#HADOOP
export HADOOP_HOME=/home/zkpk/hadoop-2.7.3
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
```
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162853955-508389603.png)
#### 10.3 使環境變數生效:
`[zkpk@master ~]$ source ~/.bash_profile`
### 11 格式化Hadoop檔案目錄(在master上執行)
#### 11.1 格式化命令如下
`[zkpk@master ~]$ hdfs namenode -format`
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162911148-475339428.png)
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162927942-1588259796.png)
### 12 啟動Hadoop叢集(在master上執行)
#### 12.1 執行start-all.sh命令
說明:格式化後首次執行此命令,提示輸入yes/no時,輸入yes。
`[zkpk@master ~]$ start-all.sh`
#### 12.2 檢視程序是否啟動
##### 12.2.1 在master的終端執行jps命令,出現下圖效果
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162941023-136551656.png)
注意:前面那些數字可能因為自己的實驗環境不同而不同。
##### 12.2.2 在slave01的終端執行jps命令,出現如下效果
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107162950637-1844990638.png)
##### 12.2.3 在slave02的終端執行jps命令,出現如下效果
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107163000248-835338860.png)
#### 12.3 Web UI檢視叢集是否成功啟動
##### 12.3.1 在master上開啟Firefox瀏覽器,在瀏覽器位址列中輸入`http://master:50070`,檢查`namenode`和 `datanode` 是否正常,如下圖所示。
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107163012697-1240150823.png)
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107163040962-2000701395.png)
##### 12.3.2開啟瀏覽器新標籤頁,位址列中輸入`http://master:18088`,檢查`Yarn`是否正常,如下圖所示。
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107163054525-2033558647.png)
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107163106327-2004059754.png)
#### 12.4執行PI例項檢查叢集是否成功
##### 12.4.1執行下面的命令:
`[zkpk@master~]$ hadoop jar ~/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar pi 10 10`
##### 12.4.2會看到如下的執行結果:
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107163119803-570864512.png)
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107163130252-1916103580.png)
![](https://img2020.cnblogs.com/blog/2061063/202101/2061063-20210107163139517-1667515847.png)
##### 12.4.3最後輸出:`Estimated value of Pi is 3.20000000000000