Hadoop(4) 完全分佈式搭建以及集羣中免密登錄的配置


Hadoop(4)
完全分佈式搭建以及集羣中免密登錄的配置

Hadoop完全分佈式搭建

分佈式的節點分配

首先我們需要了解一下一個Hadoop集羣需要哪些節點:

在僞分佈式我們一共啓動了NameNode,DataNode,ResourceManager和NodeManager

  1. NameNode需要單獨在一個節點
  2. 其中DataNode和NodeManager需要在同一個節點上,但是一般來說,Hadoop的默認副本數量是3個,也就是說我們需要3個DataNode節點
  3. ResourceManager需要在同一個節點
  4. 除了上面介紹的這幾個結點,我們還需要一SecondaryNameNode節點

綜上,如果想要搭建一個Hadoop集羣,理論上我們需要六臺雲主機或者是虛擬機,但是由於資源有限,我們使用3臺虛擬機搭建,我們將NameNode,SecondaryNameNode和ResourceManager各搭建在一個節點上,此外每個節點再分配一個DataNode,結構如下:
在這裏插入圖片描述

分佈式配置

  1. 核心配置

修改每一個節點中的core-site.xml文件,將其中的namenode指定爲第一臺主機

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

        <!-- 指定Hadoop運行時產生文件的存儲目錄 -->
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/opt/hadoop-2.7.7/data/tmp</value>
        </property>
</configuration>
  1. HDFS配置

在每個節點上配置hadoop-env.sh,指定java路徑

export JAVA_HOME=/opt/jdk1.8.0_11

在每個節點上配置hdfs-site.xml

<configuration>
        <!-- 指定HDFS副本的數量 -->
        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
        <!--指定Hadoop SecondaryNameNode節點-->
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>host02:50090</value>
        </property>
</configuration>
  1. yarn配置

在每個節點上配置yarn-env.sh,配置java路徑

export JAVA_HOME=/opt/jdk1.8.0_11

在每個節點上配置yarn-site.xml,配置,指定Reducer獲取數據的方式和ResourceManager的節點

<configuration>
<!-- Site specific YARN configuration properties -->
	<!--Reducer獲取數據的方式-->
	<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
	</property>
	<!--指定yarn的ResourceManager的地址-->
	<property>
        <name>yarn.resourcemanager.hostname</name>
        <value>host03</value>
	</property>
</configuration>
  1. MapReduce配置

在每個節點上配置mapred-env.sh,配置java路徑

export JAVA_HOME=/opt/jdk1.8.0_11

複製一份mapred-site.xml.template,命名爲mapred-site.xml

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

編輯mapred-site.xml,指定MapReduce運行在Yarn上

<configuration>
        <!--指定mr運行在yarn上-->
	<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
	</property>
</configuration>

啓動集羣

  1. 格式化hdfs

注意

一定要在NameNode上格式化hdfs!!

hdfs namenode -format

如果出現了Storage directory /opt/module/hadoop-2.7.7/data/tmp/dfs/name has been successfully formatted.這句話,說明格式化成功!如果報錯,根據報錯信息看以下那個配置文件配置錯了,修改一下重新格式化即可

  1. 啓動集羣

在第一個節點(192.168.8.101)上啓動NameNode和DataNode

hadoop-daemon.sh start namenode
hadoop-daemon.sh start datanode

在第二個節點(192.168.8.102)上啓動SecondaryNameNode和DataNode

hadoop-daemon.sh start secondarynamenode
hadoop-daemon.sh start datanode

在第三個節點(192.168.8.103)上啓動DataNode

<Hadoop安裝目錄>/hadoop-daemon.sh start datanode
  1. 啓動之後使用jps命令檢查每個節點相應的進程是否啓動成功
  2. 然後在瀏覽器訪問NameNode節點的50070端口
    在這裏插入圖片描述

然後點擊Datanodes

然後查看是否有3個DataNode節點
在這裏插入圖片描述
到此位置,集羣啓動成功!

免密登錄配置

剛剛我們使用3臺虛擬主機模擬了Hadoop分佈式集羣的啓動,這就已經夠麻煩了,如果有上千臺主機,不可能一個個節點的去啓動,所有我們需要一個一次性啓動所有主機的方法.

但是如果要實現只啓動一個節點,就啓動整個集羣的話,我們需要集羣中所有的主機之間都可以互相遠程訪問,但是遠程訪問其他的主機,每次都需要輸入登錄密碼,那麼有沒有一種可能實現免密登錄呢?當然可以,下面就介紹這種方法(SSH免密登錄)

SSH協議介紹

配置免密登錄就需要了解以下SSH協議,說白了就是一個遠程連接的加密協議,可以遠程連接其他主機執行shell命令

其主要的形式就是,產生一對祕鑰(假設是A和B),在主機1上,發送的消息使用祕鑰A加密,發送到主機2上,然後主機2使用祕鑰B解密,就能還原主機1上發送的內容.注意經過祕鑰A加密的消息,只能通過逾期配對的祕鑰B解密,其他的祕鑰都不可以解密,包括祕鑰A本身也不能解密它自己加密的內容,這種加密和解密使用不同祕鑰的形式叫做非對稱加密,而SSH協議就是使用的非對稱加密

非對稱加密的好處就是,被登錄的主機2只要保留祕鑰B,那麼 通過其他主機發送的消息,通過祕鑰A加密之後,除了主機2,其他人即便是是截取到了加密的信息,也不會破譯

我們把加密的祕鑰A叫做公鑰,解密的祕鑰B叫做私鑰

非對稱加密的算法不只有一個,在Linux中我們一般採用rsa算法實現非對稱加密

免密登錄的配置
  1. 在需要登錄的主機上生成公鑰
ssh-keygen -t rsa

然後一路回車,直到出現以下內容,其中會告訴你公鑰和私鑰的路徑
在這裏插入圖片描述
2. 查看存放祕鑰的目錄,會發現裏面已經有了公鑰和私鑰
3. 將公鑰發送給其他的主機

ssh-copy-id <其他主機名(我這裏是host02)>

然後根據提示,輸入yes,然後輸入host02的密碼,就會提示發送成功

在這裏插入圖片描述
這個時候在host02中,查看~/.ssh目錄

ll ~/.ssh

會發現有一個authorized_keys的文件,這裏面存的就是剛剛發送的公鑰

  1. 測試登錄host02
ssh host02

如果登錄成功,說明配置成功

注意

1. ssh配置好之後,只能單方面登錄(host01->host02),如果想要host02登錄host01,就需要在host02中生成公鑰,然後發送到host01上

2. 如果host01想要通過ssh登錄自己,也需要將祕鑰給自己發送一遍

集羣中免密登錄的簡單配置

剛剛我們完成了一臺主機登錄一臺主機的免密登錄,但是我們目前只有三臺主機的話,想要每臺主機都能登錄集羣中的主機(包括自己),就需要兩兩配置,所有主機之間都需要傳輸自己的公鑰,這樣會極大的浪費時間

但是有沒有一種方法,可以很快的實現集羣中的兩兩登錄呢?答案當然是有的,主要思想就是,首先在其中一臺主機上實現通過登錄自己,然後再把這臺主機上的.ssh/目錄拷貝到其他主機的相同目錄

這樣每臺主機的公鑰和私鑰都是一樣的,也就是說,所有的主機之間都可使用相同的公鑰和私鑰,也就實現的所有主機之間相互登錄

具體的過程這裏就不跟大家演示了,大家可以使用scp或者xsync命令實現集羣中.ssh/文件的傳輸

一鍵啓動Hadoop集羣的配置

1, 完成集羣的免密登錄之後,我們只需要再修改以下Hadoop的從節點配置文件即可

vim <Hadoop安裝目錄>/etc/hadoop/slaves

一開始裏面只有localhost,代表本機,我們把localhost刪掉,然後添加上集羣中其他的從節點(這裏就是所有的三臺主機)

host01
host02
host03
  1. 然後通過scp或者xsync命令將slaves文件同步到集羣中的其他主機上
  2. 然後在NameNode節點上啓動HDFS
start-dfs.sh

啓動之後在各個節點上使用jps命令查看相應的HFDS進程是否啓動(NameNode,DataNode)

  1. 然後在ResourceManager節點上啓動yarn
start-yarn.sh

然後在各個節點上使用jps命令查看相應的yarn進程是否啓動(ResourceManager,NodeManager)

  1. 最後訪問NameNode的50070端口,看DataNode中是否是3個節點

然後訪問ResourceManager的8088端口,看Yarn資源管理是否有內容

如果以上都沒有問題,說明集羣啓動成功

發佈了29 篇原創文章 · 獲贊 3 · 訪問量 1877
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章