【Hadoop】在Ubuntu系統下安裝Hadoop集群安裝


本環境使用

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/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM