1. 程式人生 > >史上最簡單詳細的Hadoop完全分散式叢集搭建

史上最簡單詳細的Hadoop完全分散式叢集搭建

一.安裝虛擬機器環境

Vmware12中文官方版 連結:https://pan.baidu.com/s/1IGKVfaOtcFMFXNLHUQp41w 提取碼:6rep

啟用祕鑰:MA491-6NL5Q-AZAM0-ZH0N2-AAJ5A

這個安裝就十分的簡單了,只需要不斷點選下一步,直到安裝完成就OK了;

二.虛擬機器的安裝(Centos7)

這個步驟我分享一個詳細安裝地址:https://www.cnblogs.com/tony-hyn/p/9677902.html

三.搭建叢集

(1)配置伺服器(我這裡是以3臺為例)

1個主節點:Mage1(192.168.102.135),2個(從)子節點,Mage2(192.168.102.136),Mage3(192.168.102.137)

(2)配置主節點名(192.168.102.135)

在命令列輸入: vi /etc/sysconfig/network
在這裡插入圖片描述
新增內容:
NETWORKING=yes
HOSTNAME=Mage1
在這裡插入圖片描述
配置兩臺子節點名(192.168.102.136)和(192.168.102.137):
vi /etc/sysconfig/network
新增內容:
NETWORKING=yes
HOSTNAME=Mage2

vi /etc/sysconfig/network
新增內容:
NETWORKING=yes
HOSTNAME=Mage3

(3)配置hosts

開啟主節點的hosts檔案,將檔案的前兩行註釋掉 (註釋當前主機的資訊)並在檔案中新增所有hadoop叢集的主機息。

在命令列輸入: vi /etc/hosts
新增3臺伺服器的節點名資訊

192.168.102.135   Mage1
192.168.102.136   Mage2
192.168.102.137   Mage3

儲存之後,將主節點的hosts分別拷貝到其他兩個子節點
命令列分別輸入:
scp /etc/hosts [email protected]:/etc/
scp /etc/hosts [email protected]:/etc/
然後分別執行(重啟伺服器也可以不執行下面的語句): /bin/hostname hostsname
例如:master上執行 /bin/hostsname master

,使之生效。

(4)關閉防火牆

1.檢視防火牆狀態
firewall-cmd --state

2.停止firewall
systemctl stop firewalld.service

3.禁止firewall開機啟動
systemctl disable firewalld.service

(5)時間同步

命令列輸入:yum install ntp 下載ntp外掛 ,
下載完成後 命令列輸入:ntpdate -u ntp1.aliyun.com
然後命令列輸入:date
如果出現如下情況表示配置成功:
在這裡插入圖片描述

(6)配置ssh無密碼訪問

生成公鑰金鑰對

在每個節點上分別執行:
命令列輸入:ssh-keygen -t rsa
一直按回車直到生成結束
執行結束之後每個節點上的/root/.ssh/目錄下生成了兩個檔案 id_rsa 和 id_rsa.pub
其中前者為私鑰,後者為公鑰
在主節點上執行:
命令列輸入:cp id_rsa.pub authorized_keys

將子節點的公鑰拷貝到主節點並新增進authorized_keys

將兩個子節點的公鑰拷貝到主節點上
分別在兩個子節點上執行:
scp /root/.ssh/id_rsa.pub [email protected]:/root/.ssh/id_rsa_Mage2.pub
scp /root/.ssh/id_rsa.pub [email protected]:/root/.ssh/id_rsa_Mage3.pub

然後在主節點上,將拷貝過來的兩個公鑰合併到authorized_keys檔案中去
主節點上執行:
cat id_rsa_Mage2.pub>> authorized_keys
cat id_rsa_Mage3.pub>> authorized_keys

將主節點的authorized_keys檔案分別替換子節點的authorized_keys檔案
主節點上用scp命令將authorized_keys檔案拷貝到子節點的相應位置
scp authorized_keys rootMage2:/root/.ssh/
scp authorized_keys rootMage3:/root/.ssh/

最後測試是否配置成功

在Mage1上分別執行
ssh Mage2
ssh Mage3
能正確跳轉到兩臺子節點的操作介面即可,同樣在每個子節點通過相同的方式登入主節點和其他子節點也能無密碼正常登入就表示配置成功。

這裡的配置方式可以有多種操作步驟,最終目的是每個節點上的/root/.ssh/authorized_keys檔案中都包含所有的節點生成的公鑰內容。

(7)安裝jdk(三臺機器都要安裝)

安裝在同一位置**/usl/local/jdk1.8.0_191**
下載JDK : https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
在這裡插入圖片描述
這裡推薦一個Windows系統與虛擬機器可以相互傳輸檔案的軟體FileZilla,下載解壓即可用:
連結:https://pan.baidu.com/s/193E3bfbHVpn5lsODg2ijJQ 提取碼:kwiw

解壓JDK : tar -zxvf /usr/local/jdk-8u73-linux-x64.gz
配置環境變數, 編輯profile檔案:
vi /etc/profile
在profile檔案末尾新增以下程式碼:

export JAVA_HOME=/usr/local/jdk1.8.0_191
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib

儲存後,使剛才編輯的檔案生效:source /etc/profile

測試是否安裝成功:java -version
如下表示jdk環境配置成功:
在這裡插入圖片描述

(8)安裝hadoop

安裝位置自定,例如安裝在/usr/local目錄下面
下載hadoop包:
https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
放在/usr/local目錄下,解壓hadoop
tar -zxvf hadoop-2.7.7.tar.gz

在usr下面生成hadoop-2.7.7目錄
配置環境變數:
vi /etc/profile
在末尾新增:

export HADOOP_HOME=/usr/local/hadoop-2.7.7
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

儲存後使新編輯的profile生效:
source /etc/profile

(9)配置hadoop

配置hadoop配置檔案

需要配置的檔案的位置為/usr/local/hadoop-2.7.7/etc/hadoop,需要修改的有以下幾個檔案:
hadoop-env.sh
yarn-env.sh
core-site.xml
hdfs-site.xml
mapred-site.xml

yarn-site.xml
slaves
其中hadoop-env.sh和yarn-env.sh裡面都要新增jdk的環境變數

hadoop-env.sh中

新增如下程式碼:export JAVA_HOME=/usr/local/jdk1.8.0_191 到如下位置:
在這裡插入圖片描述

yarn-env.sh中

新增如下程式碼:export JAVA_HOME=/usr/local/jdk1.8.0_191 到如下位置:
在這裡插入圖片描述

core-site.xml中

新增如下程式碼:

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://Mage1:9000</value>
        </property>
        <property>
                <name>io.file.buffer.size</name>
                <value>131072</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/temp</value>
        </property>
        <property>
                <name>hadoop.proxyuser.root.hosts</name>
                <value>*</value>
        </property>
        <property>
                <name>hadoop.proxyuser.root.groups</name>
                <value>*</value>
        </property>
</configuration>

注:上面程式碼中file後的路徑下的temp資料夾需要自己建立

hdfs-site.xml中

新增如下程式碼:

<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>Mage1:9001</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/dfs/data</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
        <property>
                <name>dfs.webhdfs.enabled</name>
                <value>true</value>
        </property>
        <property>
                <name>dfs.permissions</name>
                <value>false</value>
        </property>
        <property>
                <name>dfs.web.ugi</name>
                <value>supergroup</value>
        </property>
</configuration>

注:上面程式碼中file後的路徑下的/dfs/data資料夾需要自己建立

mapred-site.xml中
(注意要將mapred-site.xml.template重新命名為 .xml的檔案   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>Mage1:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>Mage1:19888</value>
        </property>
</configuration>

yarn-site.xml中

新增如下程式碼:

<configuration>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
                <value>org.apache.hadoop.mapred.ShuffleHandler</value>
        </property>
        <property>
                <name>yarn.resourcemanager.address</name>
                <value>Mage1:8032</value>
        </property>
        <property>
                <name>yarn.resourcemanager.scheduler.address</name>
                <value>Mage1:8030</value>
        </property>
        <property>
                <name>yarn.resourcemanager.resource-tracker.address</name>
                <value>Mage1:8031</value>
        </property>
        <property>
                <name>yarn.resourcemanager.admin.address</name>
                <value>Mage1:8033</value>
        </property>
        <property>
                <name>yarn.resourcemanager.webapp.address</name>
                <value>Mage1:8088</value>
        </property>
</configuration>
slaves中

修改成:
Mage1
Mage2

拷貝hadoop安裝檔案到子節點

主節點上執行:
scp -r /usr/hadoop-2.6.4 [email protected]:/usr
scp -r /usr/hadoop-2.6.4 [email protected]:/usr

拷貝profile到子節點

主節點上執行:
scp /etc/profile [email protected]:/etc/
scp /etc/profile [email protected]:/etc/

在兩個子節點上分別使新的profile生效:

source /etc/profile

格式化主節點的namenode

主節點上進入hadoop目錄
然後執行:
./bin/hadoop namenode -format
新版本用下面的語句不用hadoop命令了
./bin/hdfs namenode -format
提示:successfully formatted表示格式化成功

啟動hadoop

主節點上在hadoop目錄下執行:
./sbin/start-all.sh

主節點上jps程序如下:
NameNode
SecondaryNameNode
ResourceManager

每個子節點上的jps程序如下:
DataNode
NodeManager

如果這樣表示hadoop叢集配置成功