1. 程式人生 > >記一次Hadoop安裝部署過程

記一次Hadoop安裝部署過程

# 實驗名稱: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