1. 程式人生 > >centos7.3中搭建hadoop分散式叢集環境詳細過程

centos7.3中搭建hadoop分散式叢集環境詳細過程

一、準備工作

1、準備3臺物理機或者虛擬機器;

2、安裝centos7系統;

3、準備好相關軟體包並拷貝相關軟體到目標伺服器上

hadoop-2.9.0.tar.gz

jdk-8u131-linux-x64.tar.gz

二、配置網路

1、設定靜態網路ip

1)設定靜態ip的檔案路徑在:cd /etc/sysconfig/network-scripts/目錄中

2)開啟對應的網路配置檔案 vim ifcfg-p3p1

3)編輯儲存後,重啟網路服務   systemctl restart network

4)檢視當前網路地址 ifconfig 

2、設定主機名稱及進行IP對映

1)修改主機名稱;vim /etc/hostname

2) 開啟hosts檔案,進行主機名與ip對映 ,在檔案底部新增叢集環境中關聯的ip地址及對應機器名稱

vim /etc/hosts

3)重複以上步驟,分別修改第二臺及第三臺伺服器的機器名稱及進行ip對映

4)通過ping+主機名,檢測是否可以設定及對映成功

3、設定DNS服務(設定DNS服務可以訪問外網)

1)進入cd /etc/sysconfig/network-scripts目錄中

2)開啟網路配置檔案,在檔案中新增閘道器ip地址

3)編輯儲存退出後,重啟網路服務 service network restart

4)使用ping www.baidu.com,檢測是否可以訪問外網地址

5)重複以上步驟,配置其它兩臺機器

6)3臺機器之間,利用主機名稱可以進行互ping,檢測網路是否正常

三、建立hadoop使用者

1、建立使用者並設定密碼

useradd -m hadoop -G root -s /bin/bash

passwd hadoop

2、授予管理員許可權

輸入visudo命令,在開啟的檔案中找到 root ALL=(ALL) ALL 這一行

在底部補充新增一行 hadoop ALL=(ALL) ALL 儲存退出

四、配置SSH無密碼登入

1、檢視是否安裝SSH,檢測命令rpm -qa | grep ssh

如上所示,顯示ssh client和ssh server已安裝,不需安裝,若沒有安裝可以使用命令:

sudo yum install openssh-clients
sudo yum install openssh-server

2、配置SSH無密碼登入

1)在主機master中生成金鑰(切換到hadoop使用者的主題目錄下的.ssh檔案,如果沒有.ssh檔案請先執行一次ssh localhost)

2)  ssh-keygen -t rsa # 會有提示,都按回車就可以

如下所示生成.ssh檔案

3)進入.ssh目錄中,檢視是否生成成功

4)重複以上步驟,將其它機器dataserver1及dataserver2生成自己相對應的金鑰檔案

5)將其它分支機器(dataserver*)中生成的公鑰檔案複製一份,並重命名

6)將複製的公鑰檔案遠端拷貝到master主機中

scp id_rsa_dataserver2.pub [email protected]:~/.ssh/

scp id_rsa_dataserver1.pub [email protected]:~/.ssh/

將叢集內所有的公鑰檔案集中到主節點master中

8)將master中生成的金鑰加入授權(authorized_keys)

cat id_rsa.pub                       # 檢視生成的公鑰
cat id_rsa.pub >> authorized_keys    # 加入授權

9) 將分節點生成的公鑰檔案也加入授權

cat id_rsa_dataserver1.pub >> authorized_keys
cat id_rsa_dataserver2.pub >> authorized_keys

10)將叢集中所有機器的公鑰資訊到加入授權檔案中,檢視

11)修改檔案許可權
chmod 600 authorized_keys    # 修改檔案許可權,如果不修改檔案許可權,那麼其它使用者就能檢視該授權檔案,然後使用該金鑰也能進行登入,不安全

12)將master中的authorized_keys檔案遠端拷貝到其它主機中

scp authorized_keys [email protected]:~/.ssh/

13)在目標機器對應的目錄中檢視拷貝成功的檔案

14)測試驗證,是否可以利用ssh免密登入

五、安裝JDK

可參考該地址下的jdk安裝過程進行安裝:

https://mp.csdn.net/postedit/82854735

六、正式安裝hadoop

1、安裝hadoop

1)將Hadoop壓縮包解壓到目標安裝目錄下

tar -zxvf hadoop-2.9.0.tar.gz -C /usr/local/

2)修改檔名hadoop-2.9.0為hadoop

sudo mv ./hadoop-2.9.0/ ./hadoop

3) 更改hadoop目錄所屬者及所屬組為hadoop使用者

chown -hR hadoop /usr/local/hadoop/   # 修改所有者為hadoop
chgrp -hR hadoop /usr/local/hadoop/   # 修改所屬組為hadoop

4)檢測hadoop是否可用,檢視hadoop版本資訊

進入hadoop安裝目錄中,輸入:./bin/hadoop version,顯示如下資訊,說明安裝成功

5)重複以上步驟,其它分支機器也安裝hadoop

2、配置環境變數

1)開啟bashrc檔案

vim ~/.bashrc

新增下列資訊:

# Hadoop Environment Variables
export HADOOP_HOME=/usr/local/hadoop        # hadoop的安裝目錄,替換為你的hadoop的安裝目錄
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

2)重新載入bashrc檔案,使得配置資訊生效

source ~/.bashrc

3)檢測環境變數是否生效

echo $PATH
hadoop version

4)叢集中的其它分支重複上面步驟,配置環境變數

3、關閉防火牆及selinux程序

1)檢視

systemctl status firewalld   # 檢視防火牆狀態
systemctl stop firewalld     # 關閉防火牆

2)關閉selinux守護執行緒(使用root使用者)

getenforce       # 檢視selinux守護執行緒的狀態
setenforce 0     # 關閉selinux守護執行緒
exit             # 回到原來的終端

3)叢集中的其它分支重複上面步驟,關閉防火牆及程序

七、hadoop分散式叢集配置

1、修改hadoop的配置檔案

叢集/分散式模式需要修改 /usr/local/hadoop/etc/hadoop 中的5個配置檔案,分別為: 

core-site.xml:Hadoop的核心配置檔案
hdfs-site.xml :用於配置NameNode的URI及NameNode和DataNode的存放位置
mapred-site.xml:mapreduce相關配置
yarn-site.xml: 配置資源管理系統yarn
slaves:配置DataNode的主機名

可檢視官方文件:hadoop叢集搭建官方文件

1)修改core-site.xml檔案

在configuration節點中新增如下內容

<configuration>
    <!-- Hadoop 檔案系統的臨時目錄(NameNode和DataNode預設存放在hadoop.tmp.dir目錄)-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop/tmp</value>
    </property>

    <!-- 配置NameNode的URI -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://Master:9000</value>
    </property>
</configuration>

2)修改hdfs-site.xml檔案(在configuration節點中新增如下內容)

<!-- Master可替換為IP -->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>Master:50090</value>
    </property>
    <!-- 設定系統裡面的檔案塊的資料備份個數,預設是3 -->
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <!-- NameNode結點儲存hadoop檔案系統資訊的本地系統路徑 -->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/name</value>
    </property>
    <!-- DataNode結點被指定要儲存資料的本地檔案系統路徑,這個值只對NameNode有效,DataNode並不需要使用到它 -->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/data</value>
    </property>

3)修改mapred-site.xml 檔案(在configuration節點中新增如下內容)

在新增下面資訊之前,因 /usr/local/hadoop/etc/hadoop目錄中沒有mapred-site.xml檔案,可複製mapred-site.xml. template檔案重新命名為mapred-site.xml,進行修改

	<property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
            <description>執行框架設定為Hadoop YARN</description>
    </property>
    <property>
            <name>mapreduce.jobhistory.address</name>
            <value>master:10020</value>
            <description>Master可替換為IP</description>
    </property>
    <property>
            <name>mapreduce.jobhistory.webapp.address</name>
            <value>master:19888</value>
            <description>Master可替換為IP</description>
    </property>
    <property>
        <name>mapreduce.jobhistory.done-dir</name>
        <value>${yarn.app.mapreduce.am.staging-dir}/history/done</value>
    </property>

    <property>
        <name>mapreduce.jobhistory.intermediate-done-dir</name>
        <value>${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate</value>
    </property>

    <property>
        <name>yarn.app.mapreduce.am.staging-dir</name>
        <value>/tmp/hadoop-yarn/staging</value>
    </property>
   <property>
      <name>mapred.job.tracker</name>
      <value>master:49001</value>
   </property>

4)修改yarn-site.xml檔案在configuration節點中新增如下內容)

 <!-- Site specific YARN configuration properties -->
    <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>master<alue>
            <description>master可替換為IP</description>
    </property>
        <property>
        <description>The address of the applications manager interface in the RM.</description>
        <name>yarn.resourcemanager.address</name>
        <value>${yarn.resourcemanager.hostname}:8032<alue>
   </property>
   <property>
        <description>The address of the scheduler interface.</description>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>${yarn.resourcemanager.hostname}:8030<alue>
   </property>
   <property>
        <description>The http address of the RM web application.</description>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>${yarn.resourcemanager.hostname}:8088<alue>
   </property>
   <property>
        <description>The https adddress of the RM web application.</description>
        <name>yarn.resourcemanager.webapp.https.address</name>
        <value>${yarn.resourcemanager.hostname}:8090<alue>
   </property>
   <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>${yarn.resourcemanager.hostname}:8031<alue>
   </property>
   <property>
        <description>The address of the RM admin interface.</description>
        <name>yarn.resourcemanager.admin.address</name>
        <value>${yarn.resourcemanager.hostname}:8033<alue>
   </property>
   <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>2048<alue>
        <discription>每個節點可用記憶體,單位MB,預設8182MB</discription>
   </property>
      <property>
        <name>yarn.nodemanager.vmem-pmem-ratio</name>
        <value>2.1<alue>
   </property>
      <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>2048<alue>
   </property>
   <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false<alue>
   </property>
    <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle<alue>
            <description>Shuffle service 需要加以設定的MapReduce的應用程式服務</description>
    </property>
   <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true<alue>
   </property>

5)修改slaves檔案(將叢集中的分節點機器名稱寫入)

 

2、配置hadoop-env.sh

將
export JAVA_HOME=${JAVA_HOME}
修改為:
export JAVA_HOME=/opt/java/jdk1.8.0_131

3、將以上的配置拷貝複製到其它的分支節點上

scp core-site.xml [email protected]:/usr/local/hadoop/etc/hadoop/
scp hdfs-site.xml [email protected]:/usr/local/hadoop/etc/hadoop/
scp mapred-site.xml [email protected]:/usr/local/hadoop/etc/hadoop/
scp yarn-site.xml [email protected]:/usr/local/hadoop/etc/hadoop/
scp slaves [email protected]:/usr/local/hadoop/etc/hadoop/
scp hadoop-env.sh [email protected]:/usr/local/hadoop/etc/hadoop/

八、啟動hadoop

1、格式化namenode

1) 進入bin目錄

[[email protected] bin]$ cd /usr/local/hadoop/bin

2)執行namenode格式化命令:

./hadoop namenode -format

注意:若啟動失敗,檢視之前配置檔案過程中,xml檔案複製貼上的編碼是否正確(因我直接複製的資訊不是utf8格式導致格式化錯誤)

2、啟動hadoop

方式1):

啟動hadoop

 start-all.sh

停止hadoop

方式二:

start-dfs.sh #開啟 NameNode 和 DataNode 守護程序

3、訪問web頁面

http://masterIP地址:50070

參考部署檔案資料

https://blog.csdn.net/hg_harvey/article/details/72819007