大數據環境部署 第六章——HA模式下的Hadoop(進階)

前言:
在章節前面的文章中我們已經講到了hadoop的搭建過程,只不過是僞分佈模式下的環境,在我們真實的生產環境上是絕對不會以這種方式來部署我們的項目的,真正的部署方式都是以高可用的模式,分佈再很多的服務器上。
爲什麼要分別部署到不同的服務器上呢,其實很大的一個原因是要保證負載均衡,也就是要雨露均沾嘛,(只玩一人遲早會壞掉,別人也要休息的時間嘛)除了負載均衡外,還要保證數據的安全,如果將數據只存放在一臺服務器上,那麼如果這臺服務器的磁盤壞掉了,那我們的數據豈不丟失了,這就有了分佈式的環境,將所有的數據複製備份到多臺服務器上,這下就好了,如果其中的一臺KO了,那麼我還可以從其他的服務器上讀取,就保證了數據的安全,我們稱其爲數據的冗餘。
既然是集羣,那麼肯定有多臺機器,這麼多機器那必然要有一個領導者,來指揮其他的服務器,沒有領導者那顯然是要亂套的,有了一個領導者我們還要保證其的健康,你看哪個領導人他什麼事都自己做嗎,顯然沒有,一些不重要的活當然可以給祕書或者小弟幹啊,於是hadoop 2.x 就出現了SecondaryNamenode來減輕hadoop啓動時的負擔。
就完全了嗎? 沒有,領導人畢竟是人,他也有罷工的時候,機器畢竟是機器它也有宕機的時候,俗話說國不能一日無主,那麼hadoop也一樣它也不能一刻麼有namenode,那怎麼辦呢,領導人下臺了,那麼民衆又要新選舉一位出來當任,而hadoop也一樣,噹噹前活躍的namenode掛掉後,它就會自動從自己的備用namenode節點中選一臺出來,但此大任,這就是Hadoop的HA(High availability) 高可用
好了這裏大概的將了一下什麼是HA,因爲本文章主要還是以部署爲主,這裏就不詳細的講了,後面再看有時間做一個hadoop的專門講解。

!!! 下面步入正題 !!!
首先是服務器的規劃:
我這裏使用虛擬機模擬的三臺主機的環境
這裏的用戶需要自己添加就不用多說了

HostName Host user password
master 192.168.96.66 hadoop 123456
slave1 192.168.96.68 hadoop 123456
slave2 192.168.96.70 hadoop 123456
HostName RescoeManger Namenode ZKFC DataNode NodeManger JournalNode Zookeeper
master
slave1 ×
slave2 × ×
  • 1、首先還是安裝jdk:
    這個太簡單了都是一樣,博主前面的文章已經很詳細的介紹了jdk的安裝,這裏就跳過了
  • 2、配置免密登錄
ssh-keygen -t rsa

只需一直按回車即可
在這裏插入圖片描述

cd ~/.ssh
cat id_rsa.pub >> authorized_keys

在這裏插入圖片描述
我們要分別再三臺服務器做同樣的操作
然後將每臺authorized_keys (也就是rsa加密的公鑰信息)的內容彙總到master這臺服務器上 最後彙總的結果應該是這樣:
在這裏插入圖片描述
然後將每臺服務器上的這個authorized_keys都改成上面彙總的這個公鑰池
(我這裏是圖方便 其實用不了兩兩都互通的 新手還是照做吧)

ssh slave1

然後試一下能否直接不輸入密碼就能連接上
第一次訪問應該會彈一個Host的確認信息,輸入yes就行
在這裏插入圖片描述

  • 3、安裝zookeeper (這裏是安裝分佈式的所以會和前面的有所不同)
    首先還是將下載好的zookeeper進行解壓到指定目錄下
    zookeeper 清華鏡像
tar -zxvf zookeeper-3.4.14.tar.gz -C ~/opt/
cd opt/
ln -s zookeepr-3.4.14 zookeeper
cd zookeeper/conf
cp zoo_sample.cfg zoo.cfg
vim cfg 

在這裏插入圖片描述

cd ~/opt/zookeeper/
mkdir data1
echo "1" >> data1/myid
注意:三臺服務器都要這樣配置,其中配置文件中dataDir 末尾的data1每臺服務器是配置不同的
以我的來說就是
master 是 data1 那麼就要再zookeeper目錄下新建data1目錄 然後新建一個文件寫入表明自己身份的id 也就是1 配置文件中server.1 這個1就是你的id三臺服務器必須不一樣
slave1 就應該是新建 data2 然後新建文件myid 填入 2
slave2 就應該是新建 data3 然後新建文件myid 填入 3 
tar -zxvf hadoop2.7.7.tar.gz -C ~/opt
cd opt ln -s hadoop2.7.7 hadoop
cd opt/hadoop/etc/hadoop

這裏需要配置六個文件

hadoop-env.sh
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
slaves
vim hadoop-env.sh

只需更改箭頭所指的兩個位置即可
在這裏插入圖片描述

vim core-site.xml

在這裏插入圖片描述
配置內容:

<configuration>
	<!--配置hdfs文件系統的命名空間-->
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://bigdata</value>
	</property>
	<!--配置操作hdfs的緩存大小-->
	<property>
		<name>io.file.buffer.size</name>
		<value>4096</value>
	</property>
	<!--配置臨時數據存儲目錄-->
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/home/hadoop/opt/hadoop/tmp</value>
	</property>
	<!-- 指定zk的集羣地址 用來協調namenode的服務 -->
	<property>
		<name>ha.zookeeper.quorum</name>
		<value>master:2181,slave1:2181,slave2:2181</value>
	</property>
	<!--如果是在公網上配置,使其不使用內網進行訪問datanode-->
	<property>
		<name>dfs.client.use.datanode.hostname</name>
		<value>true</value>
		<description>only cofig in clients</description>
	</property>

</configuration>

vim hdfs-site.xml

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
! ! ! 這個文件配置有點多一定要仔細 ! ! !
配置內容

<configuration>
	<!--副本數-->
	<property>
		<name>dfs.replication</name>
		<value>3</value>
	</property>
	<!--塊大小_hadoop2_128M_hadoop1_64M_hadoop3.0_256M-->
	<property>
		<name>dfs.block.size</name>
		<value>134217728</value>
	</property>
	<!--hdfs的元數據存儲位置 dfs目錄需要自行去創建-->
	<property>
		<name>dfs.namenode.name.dir</name>
		<value>/home/hadoop/opt/hadoop/dfs/name</value>
	</property>
	<!--hdfs的數據存儲位置-->
	<property>
		<name>dfs.datanode.data.dir</name>
		<value>/home/hadoop/opt/hadoop/dfs/data</value>
	</property>


	<!--指定hdfs的命名空間 要和core-site中fs.defaultFS一致-->
	<property>
		<name>dfs.nameservices</name>
		<value>bigdata</value>
	</property>
	<!--指定hdfs的虛擬服務名下的namenode的名字-->
	<property>
		<name>dfs.ha.namenodes.bigdata</name>
		<value>namenode1,namenode2</value>
	</property>
	<!--指定namenode的rpc內部通信地址-->
	<property>
		<name>dfs.namenode.rpc-address.bigdata.namenode1</name>
		<value>master:8020</value>
	</property>
	<property>
		<name>dfs.namenode.rpc-address.bigdata.namenode2</name>
		<value>slave1:8020</value>
	</property>
	<!--指定namenode的web ui界面地址-->
	<property>
		<name>dfs.namenode.http-address.bigdata.namenode2</name>
		<value>master:50070</value>
	</property>
	<property>
		<name>dfs.namenode.http-address.bigdata.namenode2</name>
		<value>slave1:50070</value>
	</property>
	<!--指定jouranlnode數據共享目錄 namenode存放元數據信息的Linux本地地址-->
	<property>
		<name>dfs.namenode.shared.edits.dir</name>
		<value>qjournal://master:8485;slave1:8485;slave2:8485/bigdata</value>
	</property>
	<!--指定jouranlnode本地數據共享目錄 journal目錄需自行創建-->
	<property>
		<name>dfs.journalnode.edits.dir</name>
		<value>/home/hadoop/opt/hadoop/journal/data</value>
	</property>
	<!-- 開啓namenode失敗進行自動切換 -->
	<property>
		<name>dfs.ha.automatic-failover.enabled</name>
		<value>true</value>
	</property>
	<!--指定namenode失敗進行自動切換的主類 datanode存放用戶提交的大文件的本地Linux地址-->
	<property>
		<name>dfs.client.failover.proxy.provider.bigdata</name>
		<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
	</property>
	
	<!--防止多個namenode同時active(腦裂)的方式 採用某種方式殺死其中一個-->
	<property>
		<name>dfs.ha.fencing.methods</name>
		<value>sshfence</value>
	</property>
	<!--shh 連接密鑰的存放位置-->
	<property>
		<name>dfs.ha.fencing.ssh.private-key-files</name>
		<value>/home/hadoop/.ssh/id_rsa</value>
	</property>
	<!--ssh 連接時超時時限 單位ms-->
	<property>
		<name>dfs.ha.fencing.ssh.connect-timeout</name>
		<value>30000</value>
	</property>
</configuration>

vim mapred-site.xml

在這裏插入圖片描述
配置內容:

<configuration>
	<!--指定mapreduce使用的資源管理器爲yarn-->
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
		<final>true</final>
	</property>

</configuration>

vim yarn-site.xml

在這裏插入圖片描述
在這裏插入圖片描述
配置內容:

<configuration>
	<!--NodeManager上運行的附屬服務。需配置成mapreduce_shuffle,纔可運行MapReduce程序-->
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>
	<!--是否開啓yarn的高可用-->
	<property>
		<name>yarn.resourcemanager.ha.enabled</name>
		<value>true</value>
	</property>
	<!--指定yarn集羣id-->
	<property>
		<name>yarn.resourcemanager.cluster-id</name>
		<value>hayarn</value>
	</property>
	<!--指定高可用兩臺resourcemanager別名-->
	<property>
		<name>yarn.resourcemanager.ha.rm-ids</name>
		<value>resourcemanager1,resourcemanager2</value>
	</property>
	<!--指定兩臺resourcemanager主機名-->
	<property>
		<name>yarn.resourcemanager.hostname.resourcemanager1</name>
		<value>master</value>
	</property>
	<property>
		<name>yarn.resourcemanager.hostname.resourcemanager2</name>
		<value>slave2</value>
	</property>
	<!--指定resourcemanagerWeb監控端口-->
	<property>
		<name>yarn.resourcemanager.webapp.address.resourcemanager1</name>
		<value>master:8088</value>
	</property>
	<property>
		<name>yarn.resourcemanager.webapp.address.resourcemanager2</name>
		<value>slave2:8088</value>
	</property>
	<!--指定zk集羣的地址-->
	<property>
		<name>yarn.resourcemanager.zk-address</name>
		<value>master:2181,slave1:2181,slave2:2181</value>
	</property>
	<!--nodermanger使用的內存 單位MB-->
	<property>
		<name>yarn.nodemanager.resource.memory-mb</name>
		<value>1024</value>
	</property>
	<!--使用的cpu核心數-->
	<property>
		<name>yarn.nodemanager.resource.cpu-vcores</name>
		<value>1</value>
	</property>	
</configuration>

vim salves

在這裏插入圖片描述

然後再hadoop目錄下將剛纔配置的信息中沒有建的目錄建一下

cd ~/opt/hadoop
mkdir journal
mkdir dfs
mkdir tmp

最後配置環境變量

vim ~/.bashrc
source ~/.bashrc

在這裏插入圖片描述

三臺服務器均要一樣的配置

  • 5、啓動測試
    注意初次啓動一定要按照下面的順序進行
    (1)分別再三臺服務器上啓動zookeeper
zkServer.sh start  # 啓動zookeeper
zkServer.sh status # 查看當前身份

在這裏插入圖片描述
(2)啓動JournalNode

hadoop-daemons.sh start journalnode

在這裏插入圖片描述

(3) 格式化namenode(要在配置的兩個namenode中選一個執行)

hdfs namenode -format

在這裏插入圖片描述
(4) 在另外一臺namenode機器上拉取前面格式化的namenode 信息

hdfs namenode -bootstrapStandby

(5)格式化zkfc

hdfs zkfc -formatZK

在這裏插入圖片描述
(6)啓動整個集羣

start-all.sh
# 中間有stop first 提示不用管是因爲我們前面已經啓動了

(7)查看與測試集羣
在這裏插入圖片描述
在這裏插入圖片描述
從web端看我們發現兩個namenode一個處於活躍狀態,一個處於待命狀態,
我們來做個測試將master這個namenode節點停掉看看
在這裏插入圖片描述
我們再來看web端的信息:

在這裏插入圖片描述
以前處於待命狀態的namenode開始工作了變成活躍的了,
我們再來hdfs做一次查詢,發現也是正常的(就算有一個namenode掛掉還是額能夠工作):
在這裏插入圖片描述
我們再把剛剛掛掉的namenode 啓動起來:

hadoop-daemon.sh start namnode

查看網頁端反饋:
在這裏插入圖片描述
因爲當前有namenode處於活躍狀態,所以新啓動的這個namenode就進入了待命狀態。

好了hadoop的高可用已經搭建完成,時間也不早了,該去休息了,熬夜肝博客啊,如果你喜歡就點個贊在走唄! 有問題可以私聊博主,或者評論區留言也行,大家一同進步!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章