一. 硬件、軟件准備
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壓縮文件解壓到該目錄下,命令如下。
- 建立軟連接
和window上的快捷方式一樣,我們為jdk安裝的長路徑建立一個短路徑,方便我們后面設置環境變量。
- 配置環境變量
在 /etc/profile 中添加環境變量。
# 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是否安裝配置成功。看到輸出的結果是我們安裝的內容,說明安裝配置成功。
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的工作目錄下
- 執行ssh創建密鑰命令
進入hadoop用戶的工作目錄,查看目錄下的文件,發現出現了一個 .ssh 文件夾。打開 .ssh 文件夾,我們看到了生成的 公鑰 id_rsa.pub 和私鑰 id_rsa 兩個文件。
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用戶 ~/.ssh/authorized_keys 中的內容合成一個authorized_keys文件,並使用 scp 命令將該文件復刻到其余兩台機器上對應的目錄中。並且同時要設置 .ssh 目錄的訪問權限為700,設置 .ssh/authorized_keys 的權限為600。具體操作如下。
a.合成后的authorized_keys文件
hadoop@libaoshen.novalocal
b.為 .ssh 和 .ssh/authorized_keys 分別設置權限為 700 和 600(很關鍵)
[hadoop
@libaoshen_tencent ~]$ chmod 600 .ssh/authorized_keys
c.libaoshen_tencent 節點上測試是否能免密登錄,通過輸出結果看到,可以成功免密登錄
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@114.*.*.*:~/.ssh/
e.最后,在libaoshen_tencent節點上,即Master節點上嘗試免密連接其余的節點,測試ssh是否配置正確。看輸出結果,我們已經可以免密連接Slave節點了,說明ssh配置成功
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安裝目錄名。操作命令如下。
b. 配置hadoop環境變量
添加如下內容
hadoop PATH=
$PATH:$HADOOP_HOME/
bin export PATH HADOOP_HOME
再執行source /etc/profile 讓環境變量配置生效。同時在 /home/hadoop/hadoop/etc/hadoop/hadoop-env.sh 修改java路徑。如下所示。
修改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
復制配置,由於我們的配置是在root用戶下的,所以需要su root后輸入密碼才能scp
三. 啟動
- 格式化
運行 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會打印日志,當出現問題時,可以查看日志信息,准確定位錯誤位置。