本環境使用
Ubuntu-18.04.1 64,分布式集群方式(三台虛擬機:一台namenode,倆台datanode)
OpenJDK Java 1.8.0
Hadoop 2.9.1
2018.9.30. 本隨筆完結
-
創建hadoop用戶(三台都要)
為了操作方便,如果安裝Ubuntu的時候不是“hadoop”用戶,則需要增加一個名為hadoop的用戶。
打開終端是 ctrl+alt+t
Ubuntu終端窗口中,復制粘貼的快捷鍵需要加上 shift,即粘貼是 ctrl+shift+v
創建用戶:
sudo useradd -m hadoop -s /bin/bash
設置密碼,可簡單設置為 hadoop,按提示輸入兩次密碼:
sudo passwd hadoop
hadoop 用戶增加管理員權限,方便部署:
sudo adduser hadoop sudo
注銷當前用戶(在右上角),在登陸界面使用hadoop用戶進行登陸
更新apt
由於Ubuntu的一些特性,需要隨時更新一下apt,不然有時候軟件安裝不了
sudo apt-get update
后續配置文件的過程中,很多人喜歡用vi ,vim。為了圖方便可以使用gedit,請將后面用到 vim 的地方改為 gedit
可選:
Ubuntu 安裝gcc:
sudo apt-get update
sudo apt-get install gcc
-
安裝最新版本的Java
Hadoop 3.x.y 或更高版本只支持Java 1.8或者更高版本,Hadoop 2.x.y 支持Java 1.1 - 1.7版本。
更新軟件列表
sudo apt-get update
安裝openjdk-8-jdk
sudo apt-get install openjdk-8-jdk
查看Java版本,如下:
java -version
安裝好 OpenJDK 后,需要找到相應的安裝路徑
update-alternatives --config java
我們輸出的路徑為 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
其中,絕對路徑為 /usr/lib/jvm/java-8-openjdk-amd64
接着配置 JAVA_HOME 環境變量,為方便,我們在 ~/.bashrc 中進行設置
sudo vi ~/.bashrc
在文件最前面添加如下單獨一行(注意 = 號前后不能有空格),將“JDK安裝路徑”改為絕對路徑,並保存:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
讓該環境變量生效
source ~/.bashrc
設置好后我們來檢驗一下是否設置正確:
echo $JAVA_HOME # 檢驗變量值
java -version
$JAVA_HOME/bin/java -version # 與直接執行 java -version 一樣
如果正確的話
第一個會輸出JAVA安裝路徑
第二個和第三個輸出的Java安裝版本一致
這樣,Hadoop 所需的 Java 運行環境就安裝好了
-
網絡配置
修改主機名字
為了便於區分,可以修改各個節點的主機名
以 master 節點上為例:
sudo vim /etc/hostname
把里面原來的主機名字刪掉,改為:
HOSTNAME=master
按照同樣的方式,將剩下倆台主機分別改為:slave1 、slave2
網絡配置
配置IP地址
如果使用的是虛擬機安裝的系統需要注意以下幾個坑:
VirtualBox中虛擬機不能互相訪問
Virtualbox中Ubuntu系統橋接(Bridge)模式不能訪問外網
Brige模式網卡下,Ubuntu系統的IP地址不固定
解決辦法(一台有問題,三台都要改):
1. NAT卡保證了可以連外網,Bridge卡保證了虛擬機可以互聯。所以,如果已有網卡是NAT模式,則需要在虛擬機設置中再加一個網卡,其連接方式更改網絡連接方式為橋接(Bridge)模式,並保證每台主機橋接(Bridge)網卡的MAC地址不同。
2. 橋接(Bridge)分配的IP地址如果不固定,需要改成靜態(一台有問題,三台都要改)。
輸入 ifcongfig 指令(以master主機為例)。
第一個 enp0s3 為 NAT 網卡,其IP地址不是獨立主機IP地址。這是我們創建的第一個網卡,為默認網卡默認路由,這就使得其他路由不能匹配到的網段都會走 enp0s3 這個網卡,即可以訪問外網。
第二個 enp0s8 為 Bridge 網卡,其IP地址為:172.31.185.70
修改靜態IP地址
sudo vi /etc/network/interfaces
文本最后添加如下信息,保存退出:
auto enp0s8
iface enp0s8 inet static
address 172.31.185.70
重啟路由器
sudo /etc/init.d/networking restart
這樣,我們就將一台主機的IP地址配置好了。將剩下倆台主機按照同樣配置方法的ip地址改為
slave1
172.31.185.71
slave2
172.31.185.72
這樣,我們三台主機的IP地址分別為
172.31.185.70 master
172.31.185.71 slave1
172.31.185.72 slave2
執行如下命令修改自己所用節點的IP映射
sudo vim /etc/hosts
在文末添加我們的IP地址與主機名字映射。如下圖master主機所示(一般該文件中只有一個 127.0.0.1,其對應名為 localhost,如果有多余的應刪除,特別是不能有 “127.0.0.1 master” 這樣的記錄)
按照同樣的方式,將剩下倆個主機 hosts 文件都修改好。重啟生效。
配置SSH無密碼登陸節點
因為Ubuntu中默認沒有安裝SSH服務,所以我們先要執行三步使其生效(三台都要):
sudo apt-get install openssh-server #安裝服務,一路回車
sudo /etc/init.d/ssh restart #啟動服務
sudo ufw disable #關閉防火牆
執行以下命令看是否成功運行,如果成功的話,會出現倆個進程
ps -e | grep ssh
然后在master節點生成SSH公鑰,公鑰儲存在 /home/hadoop/.ssh中
cd ~/.ssh # 如果沒有該目錄,先執行一次ssh localhost
rm ./id_rsa* # 刪除之前生成的公匙(如果有)
ssh-keygen -t rsa # 一直按回車就可以
讓 master 節點可以無密碼 SSH 本機,在 master 節點上執行
cat ./id_rsa.pub >> ./authorized_keys
完成后可執行 ssh master
驗證一下(需要輸入 yes,成功后執行 exit
返回原來的終端)
ssh master
接着在 master 節點將上公匙傳輸到 slave1節點,過程中需要輸入 slave1 節點的密碼,傳輸100%以后就是傳過去了:
scp ~/.ssh/id_rsa.pub hadoop@slave1:/home/hadoop/
接着在 slave1節點上,把公鑰加入授權
mkdir ~/.ssh # 如果不存在該文件夾需先創建,若已存在則忽略
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub # 用完就可以刪掉了
對 slave2 重復上面倆步,這樣 master 節點就可以無密碼登陸倆個 slave 節點了。
ssh slave1 #可以用來檢驗是否能成功登陸,exit退出
選:
Ubuntu下出現 “ ifconfig not found ”解決方案
sudo apt-get install net-tools -y
-
安裝Hadoop
Hadoop 可以通過http://mirror.bit.edu.cn/apache/hadoop/common/ 或者者 http://mirrors.cnnic.cn/apache/hadoop/common/ 下載。
下載文件默認保存於於 ~/Download 路徑中(中文版Ubuntu為 ~/下載 路徑)。
Hadoop 我安裝的是 2.9.1 版本 ( hadoop-2.9.1.tar.gz )。如果你用的不是 2.9.1 版本,接下來的指令需要更改為你目前安裝的版本。
sudo tar -zxf ~/Download/hadoop-2.6.0.tar.gz -C /usr/local # 解壓到/usr/local中 cd /usr/local/ sudo mv ./hadoop-2.6.0/ ./hadoop # 將文件夾名改為hadoop sudo chown -R hadoop ./hadoop
將 Hadoop 安裝至 /usr/local/ 中
sudo tar -zxf ~/下載/hadoop-2.6.0.tar.gz -C /usr/local # 解壓到/usr/local中 cd /usr/local/ sudo mv ./hadoop-2.6.0/ ./hadoop # 將文件夾名改為hadoop sudo chown -R hadoop ./hadoop # 修改文件權限
輸入指令查看 Hadoop 是否可用,成功則會顯示 Hadoop 版本信息:
cd /usr/local/hadoop #到Hadoop文件夾的當前路徑
./bin/hadoop version #查看版本,再設置完環境變量以后,再任意目錄執行 hadoop version 同樣有效。
配置 Hadoop 環境變量
可以將 Hadoop 安裝目錄加入環境變量中,這樣就可以在任意目錄中使用 Hadoop 指令了。
在 master 節點,輸入指令:
sudo vim ~/.bashrc
在文末添加如下代碼,保存退出:
export HADOOP_PATH=/usr/local/hadoop
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
再使設置生效
source ~/.bashrc
-
配置分布式集群環境
需要修改 /usr/local/hadoop/etc/hadoop 中的5個配置文件。
slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml
slaves
此文件記錄的是將要作為 Datanode 節點的名字。將 slave1,slave2 主機名字加入進去,如果想讓 master 節點作為 Namenode 的同時也作為 Datanode,可以保留 localhost。(我這里沒有保留)
core-site.xml 改為如下配置:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> </configuration>
hdfs-site.xml
這文件記錄備份相關。dfs.replication 一般設為 3,我們有倆個 slave 節點,因此可以將 dfs.replication 的值設為 2
<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:50090</value> </property> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property> </configuration>
mapred-site.xml
可能默認文件名為 mapred-site.xml.template ,此時需要重命名
mv mapred-site.xml.template mapred-site.xml
改為如下配置:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> </configuration>
yarn-site.xml 改為如下配置:
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
配置好以后,將 master 節點上的 /usr/local/Hadoop 文件夾復制到剩余節點上。
在 master 節點執行:
cd /usr/local sudo rm -r ./hadoop/tmp # 刪除 Hadoop 臨時文件 sudo rm -r ./hadoop/logs/* # 刪除日志文件 tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先壓縮再復制 cd ~ #跳轉到有壓縮包的路徑下 scp ./hadoop.master.tar.gz slave1:/home/hadoop #發送到slave1節點,對其他salve節點也要執行這一步
在剩余 salve 節點上執行(以slave1為例):
sudo rm -r /usr/local/hadoop # 刪掉舊的(如果存在)
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
sudo chown -R hadoop /usr/local/hadoop
-
啟動 Hadoop
首次啟動 Hadoop 需要將 master 節點格式化:
hdfs namenode -format # 首次運行需要執行初始化,之后不需要
啟動
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
通過命令 jps 可以查看各個節點的啟動進程
jps
master 有 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServe
slave 有 DataNode、 NodeManager
以上進程缺少任意一個都表示有錯。
在 master 節點查看 DataNode 是否正常啟動。以我為例,Live datanodes 為 2,與 slave 數量一致,集群啟動成功。
hdfs dfsadmin -report
可以通過 Web 頁面看到查看 DataNode 和 NameNode 的狀態:http://master:50070/
可選:
關閉Hadoop
cd /usr/local/hadoop
stop-all.sh
特別感謝:
給力星前輩寫的非常好,單機和集群倆篇文章對我啟發都很大。可以說我的第一個hadoop集群就是在他的博文指導下搭建好的。吃水不忘挖井人,在向前輩表示感謝的同時,特此附上原網址:
http://www.powerxing.com/install-hadoop/