快速帶你搭建Hadoop的HA集羣!(確定不來看看嗎?)

相信大家在看了前面一篇《Hadoop High Availability (高可用)詳細講解》之後,大家一定在想怎麼搭建Hadoop HA的集羣呢? 不要着急 ,小生接下來就帶大家快速搭建一下(#.#)。

小生碼字不易啊,各位先給點個贊吧!

說明:搭建前先備份集羣

將集羣名字改一下

在這裏插入圖片描述

然後重新解壓你的hadoop包
解壓命令  tar zxvf 包名 -C 指定解壓目錄

在這裏插入圖片描述

解壓後的新hadoop集羣

在這裏插入圖片描述

下面要準備搭建HA集羣前的工作:

1、修改Linux主機名
2、修改IP
3、修改主機名和IP的映射關係
4、關閉防火牆
5、ssh免登陸
6、安裝JDK,配置環境變量等
7、注意集羣時間要同步

下面有連接不會的朋友可以進去看一下:

修改Linxu主機名

修改IP

修改主機名和IP的映射關係

關閉防火牆

ssh免登陸

安裝JDK,配置環境變量等

注意集羣時間要同步

《以上是搭建前準備的鏈接》

接下來開始搭建

集羣部署節點角色的規劃(3節點)
------------------
node01   namenode    resourcemanager  zkfc   nodemanager  datanode   zookeeper   journal node
node02   namenode    resourcemanager  zkfc   nodemanager  datanode   zookeeper   journal node
node03   datanode    nodemanager     zookeeper    journal node

安裝步驟:

1.安裝配置zooekeeper集羣
		1.1解壓
			tar -zxvf zookeeper-3.4.5.tar.gz -C /home/hadoop/app/ (指定目錄)
		1.2修改配置
			cd /home/hadoop/app/zookeeper-3.4.5/conf/
			cp zoo_sample.cfg zoo.cfg
			vim zoo.cfg
			修改:dataDir=/home/hadoop/app/zookeeper-3.4.5/tmp
			在最後添加:
			server.1=hadoop05:2888:3888
			server.2=hadoop06:2888:3888
			server.3=hadoop07:2888:3888
			保存退出
			然後創建一個tmp文件夾
			mkdir /home/hadoop/app/zookeeper-3.4.5/tmp
			echo 1 > /home/hadoop/app/zookeeper-3.4.5/tmp/myid
		1.3將配置好的zookeeper拷貝到其他節點(首先分別在hadoop06、hadoop07根目錄下創建一個hadoop目錄:mkdir /hadoop)
			scp -r /home/hadoop/app/zookeeper-3.4.5/ hadoop06:/home/hadoop/app/
			scp -r /home/hadoop/app/zookeeper-3.4.5/ hadoop07:/home/hadoop/app/

			
      注意:修改hadoop06、hadoop07對應/hadoop/zookeeper-3.4.5/tmp/myid內容
	hadoop06:
	  echo 2 > /home/hadoop/app/zookeeper-3.4.5/tmp/myid
	hadoop07:
      echo 3 > /home/hadoop/app/zookeeper-3.4.5/tmp/myid
2.安裝配置hadoop集羣
		2.1解壓
			tar -zxvf hadoop-2.6.4.tar.gz -C /home/hadoop/app/
		2.2配置HDFS(hadoop2.0所有的配置文件都在$HADOOP_HOME/etc/hadoop目錄下)
			#將hadoop添加到環境變量中
			vim /etc/profile
			export JAVA_HOME=/usr/java/jdk1.7.0_55
			export HADOOP_HOME=/hadoop/hadoop-2.6.4
			export PATH=$PATH:$JAVA_HOME/cluster1n:$HADOOP_HOME/cluster1n
			
			#hadoop2.0的配置文件全部在$HADOOP_HOME/etc/hadoop下
			cd /home/hadoop/app/hadoop-2.6.4/etc/hadoop
			
            2.2.1修改hadoop-env.sh
			export JAVA_HOME=/home/hadoop/app/jdk1.7.0_55
3.修改以下配置文件
1、修改core-site.xml

<configuration>
<!-- 集羣名稱在這裏指定!該值來自於hdfs-site.xml中的配置 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster1</value>
</property>
<!-- 這裏的路徑默認是NameNode、DataNode、JournalNode等存放數據的公共目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/servers/hadoop-2.6.0-cdh5.14.0/HAhadoopDatas/tmp</value>
</property>

<!-- ZooKeeper集羣的地址和端口。注意,數量一定是奇數,且不少於三個節點-->
<property>
<name>ha.zookeeper.quorum</name>
<value>node01:2181,node02:2181,node03:2181</value>
</property>
</configuration>
2、修改hdfs-site.xml

<configuration>
<!--指定hdfs的nameservice爲cluster1,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>cluster1</value>
</property>
<!-- cluster1下面有兩個NameNode,分別是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.cluster1</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.cluster1.nn1</name>
<value>node01:8020</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.cluster1.nn1</name>
<value>node01:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.cluster1.nn2</name>
<value>node02:8020</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.cluster1.nn2</name>
<value>node02:50070</value>
</property>
<!-- 指定NameNode的edits元數據在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node01:8485;node02:8485;node03:8485/cluster1</value>
</property>
<!-- 指定JournalNode在本地磁盤存放數據的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/export/servers/hadoop-2.6.0-cdh5.14.0/journaldata</value>
</property>
<!-- 開啓NameNode失敗自動切換 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 指定該集羣出故障時,哪個實現類負責執行故障切換 -->
<property>
<name>dfs.client.failover.proxy.provider.cluster1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔離機制方法,多個機制用換行分割,即每個機制暫用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
</value>
</property>
<!-- 使用sshfence隔離機制時需要ssh免登陸 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔離機制超時時間 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
3、修改mapred-site.xml

<configuration>
<!-- 指定mr框架爲yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>	
4、修改yarn-site.xml

<configuration>
<!-- 開啓RM高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 指定RM的名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分別指定RM的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node01</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node02</value>
</property>
<!-- 指定zk集羣地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node01:2181,node02:2181,node03:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
修改slaves
node01
node02	
node03
將軟件拷貝到所有節點
		scp -r hadoop-2.6.0-cdh5.14.0 node02:/$PWD
		scp -r hadoop-2.6.0-cdh5.14.0 node03:/$PWD
配置免密碼登陸
	#首先要配置node01到node01、node02、node03 的免密碼登陸
	#在node01上生產一對鑰匙
	ssh-keygen  
	#將公鑰拷貝到其他節點,****包括自己****
	ssh-coyp-id node01
	ssh-coyp-id node02
	ssh-coyp-id node03 

	#注意:兩個namenode之間要配置ssh免密碼登陸  ssh遠程補刀時候需要
	#在node02上生產一對鑰匙
	ssh-keygen  
	#將公鑰拷貝到node01
	ssh-coyp-id node01

注意:嚴格按照下面的步驟!!!

1、啓動zookeeper集羣(分別在node01、node02、node03上啓動zk)
			bin/zkServer.sh start
			#查看狀態:一個leader,兩個follower
			bin/zkServer.sh status
2、手動啓動journalnode(分別在在node01、node02、node03上執行)
			hadoop-daemon.sh start journalnode
			#運行jps命令檢驗,node01、node02、node03上多了JournalNode進程
3、格式化namenode
			#在node01上執行命令:
			hdfs namenode -format
			#格式化後會在根據core-site.xml中的hadoop.tmp.dir配置的目錄下生成個hdfs初始化文件,
			

			把hadoop.tmp.dir配置的目錄下所有文件拷貝到另一臺namenode節點所在的機器
			scp -r tmp/ node02:/home/hadoop/app/hadoop-2.6.4/
			
			##也可以這樣,建議hdfs namenode -bootstrapStandby
4、
		格式化ZKFC(在active上執行即可)
			hdfs zkfc -formatZK
5、
啓動HDFS(在node01上執行)
			start-dfs.sh
6、啓動YARN
 
			start-yarn.sh
			還需要手動在standby上手動啓動備份的  resourcemanager
			yarn-daemon.sh start resourcemanager
7、hadoop-2.6.4配置完畢,可以統計瀏覽器訪問:

先jps查看進程

[root@node01 /]# jps
14305 QuorumPeerMain
15186 NodeManager
14354 JournalNode
14726 DataNode
20887 Jps
15096 ResourceManager
15658 NameNode
14991 DFSZKFailoverController
訪問node01
		http://node01:50070
		NameNode 'node01:8020' (active) 
		可以發現該節點namenode狀態爲  active

在這裏插入圖片描述

訪問node02
		http://node02:50070
		NameNode 'node02:8020' (standby)
		可以發現該節點namenode狀態爲   standby

在這裏插入圖片描述

這樣就說明我們的HA集羣部署成啦!
接下來我們驗證一下

首先向hdfs上傳一個文件

hadoop fs -put /etc/profile /profile
hadoop fs -ls /

查看UI界面可以看到上傳的文件夾已經上來了!
在這裏插入圖片描述

然後再kill掉active的NameNode

kill -9 <pid of NN>
通過瀏覽器訪問:http://node02:50070
NameNode 'node02:8020' (active)
這個時候可以看到node02上的NameNode變成了active

在這裏插入圖片描述

在執行命令:

hadoop fs -ls /
-rw-r--r--   3 root supergroup       1926 2014-02-06 15:36 /profile
		剛纔上傳的文件依然存在!!!
		手動啓動那個掛掉的NameNode,現在我們手動啓動一下
		
		hadoop-daemon.sh start namenode
		
		通過瀏覽器訪問:http://node01:50070  
		NameNode 'node01:8020' (standby)
		

前面我們驗證的HA 現在我們驗證一下Yarn:

任意一個節點,運行一下hadoop提供的demo中的WordCount程序:

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount /profile /out

在這裏插入圖片描述

ok 看到這個就大功告成了!

給大家拓展一些知識:

	測試集羣工作狀態的一些指令 
    hdfs dfsadmin -report	 查看hdfs的各節點狀態信息


cluster1n/hdfs haadmin -getServiceState nn1		 獲取一個namenode節點的HA狀態

scluster1n/hadoop-daemon.sh start namenode  單獨啓動一個namenode進程


./hadoop-daemon.sh start zkfc   單獨啓動一個zkfc進程

好啦,今天就到這裏啦。晚點小生給大家更新下一階段內容Redis!

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