1. 程式人生 > 實用技巧 >搭建Hadoop叢集

搭建Hadoop叢集

寫在前面

按照老師的要求,來學習大資料了。大資料中hadoop體系佔據著很大一部分,要學習hadoop相關內容就要先搭建好他的叢集。這裡就記錄一下如何搭建一個hadoop叢集。

前期準備

  1. 三臺虛擬機器(關閉了防火牆,設定好了靜態ip,mac地址和主機名稱,安裝了JDK和hadoop,並設定了環境變數),如下圖:

下面演示一下如何配置一臺主機,剩下兩臺直接克隆(Vmware軟體裡右鍵虛擬機器管理裡有克隆,選擇完整克隆)即可。這裡使用的是centos7系統。

  • 關閉防火牆

    在終端介面輸入命令

    systemctl status firewalld.service
    

    檢視防火牆狀態,active(running)代表正在執行。

    輸入命令

    systemctl stop firewalld.service
    

    來停止防火牆,再使用上面的命令檢視是否關閉。如果出現disactive(dead)則表示已關閉。

    輸入命令

    systemctl disable firewalld.service
    

    來將防火牆的開機自啟關閉,永久關閉防火牆。

  • 修改主機名

    見該文章:centos7修改主機名 並且按照教程來配置好主機名和ip的對映(linux裡的hosts檔案和windows裡的hosts檔案),方便日後使用。在設定完後可以在命令列用主機名ping測試一下:

  • 建立自己的使用者賬號,並賦予root許可權:

    在安裝centos7時就會讓你建立一個自己的賬號,只需要讓它具有root許可權即可。

    修改/etc/sudoers檔案,找到如下圖的地方:

    在root使用者下面一行新增你的使用者賬號,按照上面的格式寫就行。

  • 在/opt目錄下建立module和software資料夾:

    sudo mkdir module
    sudo mkdir software
    

    修改module和software的所有者cd

    sudo chown liuge:liuge module/ software/
    

    這裡的liuge是我自己的使用者,設定成你自己的就行。

  • 安裝JDK和hadoop

    檢視是否安裝java軟體:

    rpm -qa | grep java
    

    如果安裝版本低於1.8,解除安裝它:

    sudo rpm -e 軟體包
    

    用ssh軟體將jdk和hadoop的gz包傳到/opt/software下,這裡我用的是MobaXterm

    這裡使用的是jdk1.8和hadoop2.7.2的版本。

    將jdk解壓到/opt/module下:

    tar -zxvf jdk-8u202-linux-x64.tar.gz -C /opt/module/
    

    也把hadoop解壓到opt/module/下:

    tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/
    

    接下來配置環境變數。

    我們首先獲取到jdk的路徑和hadoop的路徑:

    [liuge@hadoop03 jdk1.8.0_202]$ pwd
    /opt/module/jdk1.8.0_202
    [liuge@hadoop03 hadoop-2.7.2]$ pwd
    /opt/module/hadoop-2.7.2
    

    用vim編輯/etc/profile檔案:

    sudo vim /etc/profile
    

    在profile檔案的末尾新增JDK和hadoop路徑:

    #JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_202
    export PATH=$PATH:$JAVA_HOME/bin
    
    ##HADOOP_HOME
    export HADOOP_HOME=/opt/module/hadoop-2.7.2
    export PATH=$PATH:$HADOOP_HOME/bin
    export PATH=$PATH:$HADOOP_HOME/sbin
    

    儲存後退出(esc :wq)。

    讓修改後的檔案生效:

    source /etc/profile
    

    檢視是否配置完成:

    java -version
    hadoop version
    

    如果有版本資訊出現,則說明配置完成了。

  • 設定mac地址和靜態IP

    當克隆出新的主機後,先不要開啟,用Vmware開啟該虛擬機器設定,網路介面卡,高階,重新生成一個mac地址。

    設定靜態IP,直接通過圖形化介面操作即可。

  1. 為了方便日後使用,我們編寫一個指令碼用來叢集分發各種配置檔案等等。

    在/home/liuge 目錄下建立bin目錄,並在bin目錄下建立xsync檔案。這裡的路徑就是你的使用者home。在裡面寫入如下內容:

    #!/bin/bash
    #1 獲取輸入引數個數,如果沒有引數,直接退出
    pcount=$#
    if((pcount==0)); then
    echo no args;
    exit;
    fi
    
    #2 獲取檔名稱
    p1=$1
    fname=`basename $p1`
    echo fname=$fname
    
    #3 獲取上級目錄到絕對路徑
    pdir=`cd -P $(dirname $p1); pwd`
    echo pdir=$pdir
    
    #4 獲取當前使用者名稱稱
    user=`whoami`
    
    #5 迴圈
    for((host=3; host<6; host++)); do
            echo ------------------- hadoop$host --------------
            rsync -rvl $pdir/$fname $user@hadoop0$host:$pdir
    done
    

    這裡的迴圈程式碼裡的條件要換成你自己的虛擬機器名稱。

    修改指令碼xsync具有執行許可權:

    chmod 777 xsync
    

    要使用指令碼,直接xsync+檔名稱即可:

    xsync /home/liuge/bin
    
  2. 配置ssh無密登入

    我們進入第一臺主機(hadoop03)的/home/liuge/.ssh目錄下,生成公鑰和私鑰:

    ssh-keygen -t rsa
    

    如果沒有這個目錄,就先用ssh命令連線一下別的主機。

    然後將公鑰拷貝到免密登入的機子上:

    ssh-copy-id hadoop03
    ssh-copy-id hadoop04
    ssh-copy-id hadoop05
    

    按照這個操作,我們再在hadoop03上用root賬號配置一下免密登入到hadoop03、04、05。並且在hadoop04上用liuge賬號(自己的賬號)配置一下hadoop04免密登入到hadoop03、hadoop04、hadoop05上。

叢集配置

首先我們要規劃好如何分配:

hadoop03 hadoop04 hadoop05
HDFS NameNode DataNode DataNode SecondaryNameNode DataNode
YARN NodeManager ResourceManager NodeManger NodeManager

接下來開始設定配置檔案。

注意,配置xml時要把property標籤都放在configuration標籤裡,如圖

core-site.xml

在/opt/module/hadoop-2.7.2/etc/hadoop 下,開啟core-site.xml檔案,新增如下內容:

<!-- 指定HDFS中NameNode的地址 -->
<property>
		<name>fs.defaultFS</name>
      <value>hdfs://hadoop03:9000</value>
</property>

<!-- 指定Hadoop執行時產生檔案的儲存目錄 -->
<property>
		<name>hadoop.tmp.dir</name>
		<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>

hadoop-env.sh

還是在當前目錄下,開啟hadoop-env.sh,配置JAVA_HOME:

export JAVA_HOME=/opt/module/jdk1.8.0_202

hdfs-site.xml

依然是當前目錄,開啟hdfs-site.xml檔案,新增如下內容:

<!-- 指定Hadoop輔助名稱節點主機配置 -->
<property>
      <name>dfs.namenode.secondary.http-address</name>
      <value>hadoop05:50090</value>
</property>

yarn-env.sh

當前目錄,開啟yarn-env.sh,新增JAVA_HOME:

export JAVA_HOME=/opt/module/jdk1.8.0_202

yarn-site.xml

當前目錄,開啟yarn-site.xml,新增如下配置:

<!-- Reducer獲取資料的方式 -->
<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
</property>

<!-- 指定YARN的ResourceManager的地址 -->
<property>
		<name>yarn.resourcemanager.hostname</name>
		<value>hadoop04</value>
</property>

mapred-env.sh

當前目錄,開啟mapred-env.sh,配置JAVA_HOME

export JAVA_HOME=/opt/module/jdk1.8.0_202

mapred-site.xml

當前目錄,將mapred-site.xml.template改名為mapred-site.xml,並開啟:

cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml

新增如下配置檔案:

<!-- 指定MR執行在Yarn上 -->
<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
</property>

配置slaves

當前目錄下,開啟slaves檔案,加入如下內容:

hadoop03
hadoop04
hadoop05

這裡寫好自己的叢集名稱(這裡需要前面配置了對映,如果沒配置請往上翻),同時這個檔案不允許有空格或者空行。

分發配置檔案

運用我們剛才寫的xsync指令碼,將配置檔案分發:

xsync /opt/module/hadoop-2.7.2/

啟動叢集

我們在hadoop03(配置了NameNode)的機子上,在/opt/module/hadoop-2.7.2目錄下,輸入以下命令啟動HDFS:

sbin/start-dfs.sh

同理,可以使用stop-dfs.sh來停止HDFS:

sbin/stop-dfs.sh

在hadoop04(配置了ResourceManager)的機子上,在/opt/module/hadoop-2.7.2目錄,輸入以下命令啟動yarn:

sbin/start-yarn.sh

同理,停止:

sbin/stop-yarn.sh

網頁測試

在web端進行測試,看看是否啟動了。比如hadoop03:50070(我這裡是在windows設定了對映,實際還是ip地址),開啟HDFS的管理介面。

可以使用hadoop05:50090開啟SecondNameNode的介面。

如果打不開,請按照上面的流程再檢查一遍。

總結

總的來說,搭建一個hadoop叢集還是不容易的。不過如果配置完一次,下一次直接啟動就好了。還是比較方便的。