Hadoop完全分布式安裝配置完整過程
一. 硬件、軟件準備
1. 硬件設備
為了方便學習Hadoop,我采用了雲服務器來配置Hadoop集群。集群使用三個節點,一個阿裏雲節點、一個騰訊雲節點、一個華為雲節點,其中阿裏雲和騰訊雲都是通過使用學生優惠渠道購買了一年的雲服務,華為雲使用免費7天或15天的雲服務器。我決定使用騰訊雲節點作為Master節點,阿裏雲節點和華為雲節點作為Slave節點。集群基本結構如下圖:
雲服務器配置信息如下:
集群網絡環境:
分別在每臺機器上創建了用戶hadoop,並且全部禁用了防火墻。
2. 軟件
由於Hadoop需要JVM環境,所以需要下載JDK。需要的軟件清單如下圖所示。
二、環境搭建
1. JAVA安裝
- 解壓
我們下載軟件jdk-8u61-linux-x64.tar.gz放在了 /home/install-package 下。先在 /home 下創建了java目錄,並將jdk壓縮文件解壓到該目錄下,命令如下。
[root@libaoshen_tencent java]# tar -zxvf /home/install-package/jdk-8u161-linux-x64.tar.gz -C java
- 建立軟連接
和window上的快捷方式一樣,我們為jdk安裝的長路徑建立一個短路徑,方便我們後面設置環境變量。
[root@libaoshen_tencent java]#ln -s /home/java/jdk1.8.0_161/ /home/jdk
- 配置環境變量
在 /etc/profile 中添加環境變量。
[root@libaoshen_tencent home]# vim /etc/profile
添加內容:
JAVA_HOME=/home/jdk
CLASSPATH=$JAVA_HOME/lib
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
隨後使用 source /etc/profile 命令使配置生效,最後通過執行 java –version 查看java是否安裝配置成功。看到輸出的結果是我們安裝的內容,說明安裝配置成功。
[root@libaoshen_tencent home]# source /etc/profile [root@libaoshen_tencent home]# java -version java version "1.8.0_161" Java(TM) SE Runtime Environment (build 1.8.0_161-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
2. SSH配置
Hadoop控制腳本依靠SSH來進行集群的管理,為了方便操作,設置SSH為免密訪問。
- 進入創建的用戶hadoop的工作目錄下
[root@libaoshen_tencent ~]# su hadoop [hadoop@libaoshen_tencent root]$ cd ~
- 執行ssh創建密鑰命令
[hadoop@libaoshen_tencent ~]$ ssh-keygen -t rsa
進入hadoop用戶的工作目錄,查看目錄下的文件,發現出現了一個 .ssh 文件夾。打開 .ssh 文件夾,我們看到了生成的 公鑰 id_rsa.pub 和私鑰 id_rsa 兩個文件。
[hadoop@libaoshen_tencent ~]$ ls -al total 28 drwx------ 3 hadoop hadoop 4096 Mar 16 23:49 . drwxr-xr-x. 5 root root 4096 Mar 16 23:48 .. -rw------- 1 hadoop hadoop 63 Mar 16 23:49 .bash_history -rw-r--r-- 1 hadoop hadoop 18 Aug 3 2016 .bash_logout -rw-r--r-- 1 hadoop hadoop 193 Aug 3 2016 .bash_profile -rw-r--r-- 1 hadoop hadoop 231 Aug 3 2016 .bashrc drwx------ 2 hadoop hadoop 4096 Mar 16 23:49 .ssh [hadoop@libaoshen_tencent ~]$ cd .ssh/ [hadoop@libaoshen_tencent .ssh]$ ls id_rsa id_rsa.pub
- 將生成的公鑰覆蓋到authorized_keys
[hadoop@libaoshen_tencent .ssh]$ cp id_rsa.pub authorized_keys
- 通過再這三臺機器上分別執行上面的步驟,將三臺機器上hadoop用戶 ~/.ssh/authorized_keys 中的內容合成一個authorized_keys文件,並使用 scp 命令將該文件復刻到其余兩臺機器上對應的目錄中。並且同時要設置 .ssh 目錄的訪問權限為700,設置 .ssh/authorized_keys 的權限為600。具體操作如下。
a.合成後的authorized_keys文件
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC2XHqv9F0+ueiDlBqV7M2yKRdtDRmV7OgW7WFOmcN9abkBAumDM4+vZ6fFkHlmPcUcskm7HFiQ4BEZep8NdaZ8kRr2V4dSy0T8IidXgPL6Mc8UH+e5h+VOaelfmBprb8oo0vmdJ73rAn4bswx9FW/4Rm/mTG0ZXuE288LEXktKxQEz31sH8HBDKt+uEjYq9SDiPEnE8Dg85WMHLDdTwrNH7okMrskeetXBhcacp28PXuneEB5fCOu02CdPsQ7LmJZpEt4rSGHa3f/m75jGGKlvK5+g+jGO7SXuipWaogQIVxb6xusKl0qm5YwR9uVB5I3Yy7FpFJjJMvEf78bbHYHR hadoop@libaoshen_tencent ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUqHX/2CTD9hJa+qyoEIq3juAXTXr1dBxQpsfySOA1VbKZkyzxJVGlFae9YmHrOOrnWTRFiDGrfJL/KxO7Kt1mpJFYivhAkORGgNWAf6KpjCb0ScRUqp/7aUYMjUv7a8nX0wALHURtoViLmI6A21CWuF9tuIbu5FOpquCV4Vz7z32PFNkHiG2l/mfWGzV+1R8bgkCP7JvBZnB4/4bJ+6mzmTyhiQ5VBnbBzF0IH3kCWeCY7B+XHjrW2iaCEv1mCFrBun0J7ojZYr9tv7FXgr1+B0nr3cDP2parcVPY0BdLDz+sRNVUeczQZfcVypQxfNtdCQ+6pcazBLfgL7cwZ8ab hadoop@libaoshen_ali ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0fq+6HJ72U4S/+FCijVrp6xhKlTOfajQRHISa3+sH3+wQgHzk3OXGYPJC0snkUN5fot+AQcY2n1sc2l+VItRgjxaISXseUjntAG5N0EQb8wjidPaDTYTbcFefc0aHStHJCKH800yoz7Y7DN+Z84G2Lzp7XK+m8zIBuiMpKjrGE77qGd/UmQcQ4Zk1PxWtWogs0xyrjMr3Y3t57r8xMgqPs2lIb2rlYJ3H26q5YAE6XwaNnjogRh1oM0jakEBlKl4jrFMozUQulwabjT+0gfGezXHie4dmrLPesXjGE7cs+hjUEmzYKPZAIK8i0b+YAEw3i/kr0kDWmNOP/JdgQJcEQ== [email protected]
b.為 .ssh 和 .ssh/authorized_keys 分別設置權限為 700 和 600(很關鍵)
[hadoop@libaoshen_tencent ~]$ chmod 700 .ssh/
[hadoop@libaoshen_tencent ~]$ chmod 600 .ssh/authorized_keys
c.libaoshen_tencent 節點上測試是否能免密登錄,通過輸出結果看到,可以成功免密登錄
[hadoop@libaoshen_tencent ~]$ ssh hadoop@libaohshen_tencent
Last login: Sat Mar 17 13:24:42 2018 from 127.0.0.1
d.隨後分別使用 scp 命令將該authorized_keys 復制到其他兩個節點上,同時設置文件權限以及分別測試是否能免密登錄
[hadoop@libaoshen_tencent ~]$ scp ~/.ssh/authorized_keys hadoop@39.*.*.*:~/.ssh/
[hadoop@libaoshen_tencent ~]$ scp ~/.ssh/authorized_keys hadoop@114.*.*.*:~/.ssh/
e.最後,在libaoshen_tencent節點上,即Master節點上嘗試免密連接其余的節點,測試ssh是否配置正確。看輸出結果,我們已經可以免密連接Slave節點了,說明ssh配置成功
[hadoop@libaoshen_tencent .ssh]$ ssh hadoop@39.*.*.* Last failed login: Sat Mar 17 13:31:38 CST 2018 from 193..*.*.* on ssh:notty There were 2 failed login attempts since the last successful login. Last login: Sat Mar 17 13:07:31 2018 Welcome to Alibaba Cloud Elastic Compute Service ! [hadoop@libaoshen_ali ~]$
3. Hadoop安裝和配置
- Master節點安裝Hadoop
a. 我們已經將下載好的hadoop-2.7.5.tat.gz放在了 /home/install-package 中。首先使用root身份登錄,再將 hadoop-2.7.5.tar.gz壓縮包解壓到 /home/hadoop 中,然後要麽設置link,要麽修改hadoop-2.7.5 目錄為hadoop,縮短hadoop安裝目錄名。操作命令如下。
[root@libaoshen_tencent hadoop]# tar -zxvf hadoop-2.7.5.tar.gz -C ../hadoop/ [root@libaoshen_tencent hadoop]# mv hadoop-2.7.5 hadoop [root@libaoshen_tencent hadoop]# chown -R hadoop:hadoop hadoop
b. 配置hadoop環境變量
[root@libaoshen_tencent hadoop]# vi /etc/profile
添加如下內容
HADOOP_HOME=/home/hadoop/hadoop PATH=$PATH:$HADOOP_HOME/bin export PATH HADOOP_HOME
再執行source /etc/profile 讓環境變量配置生效。同時在 /home/hadoop/hadoop/etc/hadoop/hadoop-env.sh 修改java路徑。如下所示。
[root@libaoshen_tencent hadoop]# vim /usr/hadoop/hadoop/etc/hadoop/hadoop-env.sh
修改java路徑為上面我們所配置的路徑,再執行 source hadoop-env.sh 使其生效。
修改後,執行hadoop version, 我們可以看到hadoop的版本號和其他信息。
c. 配置hadoop中的配置文件
i.core-site.xml: hadoop 的核心配置文件,添加設置為namenode節點的地址,端口號一般為9000
ii.hdfs-site.xml:設置備份數量,由於我們有兩個datanode,所以設置為2
iii.mapred-site.xml:設置jobtracker對應的節點地址,端口號一般為9001
iv.masters和slaves:masters修改為設置為master的那個節點的ip,slaves修改為設置為slave的節點的ip
v.在master上配置完成後,再使用scp命令將java、hadoop及其配置復制到其他的兩個節點上
復制hadoop
[hadoop@libaoshen_tencent hadoop]$ scp -r /usr/hadoop/hadoop hadoop@39.*.*.*:/usr/hadoop
[hadoop@libaoshen_tencent hadoop]$ scp -r /usr/hadoop/hadoop hadoop@114.*.*.*:/usr/hadoop
復制配置,由於我們的配置是在root用戶下的,所以需要su root後輸入密碼才能scp
[root@libaoshen_tencent hadoop]# scp -r /etc/profile root@39.*.*.*:/etc [root@libaoshen_tencent hadoop]# scp -r /etc/profile root@114.*.*.*:/etc
三. 啟動
- 格式化
運行 hadoop namenode –format,會初始化namenode,記錄集群元數據,即datanode的信息等。
- 啟動
在目錄 /usr/hadoop/hadoop/sbin 目錄中執行 ./start-all.sh 即可以啟動,執行 ./stop-all.sh 即可停止
啟動後可以使用 jps 命令查看hadoop後臺進程是否已經啟動
Master節點
Slave節點
可以在瀏覽器中輸入 namenode 的ip + 8088/50070 查看集群狀態
安裝過程中遇到的問題:
1. 配置不正確,導致分發給其他節點的配置也有問題,最後發現更正的成本比較高。所以一定要仔細檢查,確認配置無誤後,在復制到每個其他的節點;
2. hostname配置不正確,一定要確保 ip 和 hostname 對應,否則就可能出現 hostname unknown等報錯;
3. 在啟動過程中,hadoop會打印日誌,當出現問題時,可以查看日誌信息,準確定位錯誤位置。
Hadoop完全分布式安裝配置完整過程