基於Zookeeper搭建hadoop的HA功能

在這裏插入圖片描述
簡介
使用zookeeper和Hadoop的FailOverController的心跳檢測來維護hadoop,並在hadoop宕機的時候通過zookeeper選舉功能進行Active的切換
並使用JournalNode來維護Namenode的日誌和元信息
集羣規劃
Zookeeper集羣:
192.168.112.112 (bigdata112)
192.168.112.113 (bigdata113)
192.168.112.114 (bigdata114)

Hadoop集羣:
192.168.112.112 (bigdata112) NameNode1 ResourceManager1 Journalnode1
192.168.112.113 (bigdata113) NameNode2 ResourceManager2 Journalnode2
192.168.112.114 (bigdata114) DataNode1 NodeManager1
192.168.112.115 (bigdata115) DataNode2 NodeManager2
準備工作
1、安裝JDK
2、配置環境變量
以前搭建hadoop的環境變量同樣加上
新增加以下兩個環境變量
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root

FC:Failover Controller

3、配置免密碼登錄
4、配置主機名
5、配置host文件
6、時間同步
安裝HA操作
安裝Zookeeper集羣,
按照上一篇的zookeeper集羣安裝即可
https://blog.csdn.net/u011447164/article/details/107127022
安裝Hadoop集羣
第一步
把hadoop的安裝包上傳到bigdata112上
tar -zxvf hadoop-3.1.2.tar.gz -C …/training/
第二步
配置配置文件

修改hadoo-env.sh
	export JAVA_HOME=/root/training/jdk1.8.0_181

修改core-site.xml
		<configuration>
			<!-- 指定hdfs的nameservice爲ns1 -->
			<property>
					<name>fs.defaultFS</name>
					<value>hdfs://ns1</value>
			</property>
			
			<!-- 指定hadoop臨時目錄 -->
			<property>
					<name>hadoop.tmp.dir</name>
					<value>/root/training/hadoop-3.1.2/tmp</value>
			</property>
			
			<!-- 指定zookeeper地址 -->
			<property>
					<name>ha.zookeeper.quorum</name>
					<value>bigdata112:2181,bigdata113:2181,bigdata114:2181</value>
			</property>
		</configuration>

修改hdfs-site.xml(配置這個nameservice中有幾個namenode)
		<configuration> 
		    <!--指定hdfs的nameservice爲ns1,需要和core-site.xml中的保持一致 -->
			<property>
				<name>dfs.nameservices</name>
				<value>ns1</value>
			</property>
			
			<!-- ns1下面有兩個NameNode,分別是nn1,nn2 -->
			<property>
				<name>dfs.ha.namenodes.ns1</name>
				<value>nn1,nn2</value>
			</property>
			
			<!-- nn1的RPC通信地址 -->
			<property>
				<name>dfs.namenode.rpc-address.ns1.nn1</name>
				<value>bigdata112:9000</value>
			</property>
			<!-- nn1的http通信地址 -->
			<property>
				<name>dfs.namenode.http-address.ns1.nn1</name>
				<value>bigdata112:50070</value>
			</property>
			
			<!-- nn2的RPC通信地址 -->
			<property>
				<name>dfs.namenode.rpc-address.ns1.nn2</name>
				<value>bigdata113:9000</value>
			</property>
			<!-- nn2的http通信地址 -->
			<property>
				<name>dfs.namenode.http-address.ns1.nn2</name>
				<value>bigdata113:50070</value>
			</property>
			
			<!-- 指定NameNode的日誌在JournalNode上的存放位置 -->
			<property>
				<name>dfs.namenode.shared.edits.dir</name>
				<value>qjournal://bigdata112:8485;bigdata113:8485;/ns1</value>
			</property>
			<!-- 指定JournalNode在本地磁盤存放數據的位置 -->
			<property>
				<name>dfs.journalnode.edits.dir</name>
				<value>/root/training/hadoop-3.1.2/journal</value>
			</property>

			<!-- 開啓NameNode失敗自動切換 -->
			<property>
				<name>dfs.ha.automatic-failover.enabled</name>
				<value>true</value>
			</property>
			
			<!-- 配置失敗自動切換實現方式 -->
			<property>
				<name>dfs.client.failover.proxy.provider.ns1</name>
				<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
			</property>
			
			<!-- 配置隔離機制方法,多個機制用換行分割,即每個機制暫用一行-->
			<property>
				<name>dfs.ha.fencing.methods</name>
				<value>
					sshfence
					shell(/bin/true)
				</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>

修改mapred-site.xml
	<configuration>
	<property>
			<name>mapreduce.framework.name</name>
			<value>yarn</value>
	</property>
	</configuration>

修改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>bigdata112</value>
		</property>
		<property>
		   <name>yarn.resourcemanager.hostname.rm2</name>
		   <value>bigdata113</value>
		</property>
		
		<!-- 指定zk集羣地址 -->
		<property>
		   <name>yarn.resourcemanager.zk-address</name>
		   <value>bigdata112:2181,bigdata113:2181,bigdata114:2181</value>
		</property>
		
		<property>
		   <name>yarn.nodemanager.aux-services</name>
		   <value>mapreduce_shuffle</value>
		</property>
	</configuration>

修改workers
	bigdata114
	bigdata115

第三步
將配置好的hadoop拷貝到其他節點
scp -r /root/training/hadoop-3.1.2/ root@bigdata113:/root/training/
scp -r /root/training/hadoop-3.1.2/ root@bigdata114:/root/training/
scp -r /root/training/hadoop-3.1.2/ root@bigdata115:/root/training/
第四步
啓動Zookeeper集羣
在每個zookeeper節點執行zkServer.sh start
第五步
在bigdata112和bigdata113上啓動journalnode
hadoop-daemon.sh start journalnode
如果不啓動會出現如下異常
在hdfs dfs -format的時候出現下面的異常,這個是因爲沒有啓動journal節點
2020-07-04 22:34:35,029 WARN namenode.NameNode: Encountered exception during format:
org.apache.hadoop.hdfs.qjournal.client.QuorumException: Unable to check if JNs are ready for formatting. 1 exceptions thrown:
192.168.112.113:8485: Call From bigdata112/192.168.112.112 to bigdata113:8485 failed on connection exception: java.net.ConnectException: Connection refused;
2020-07-04 22:34:35,054 INFO util.ExitUtil: Exiting with status 1: org.apache.hadoop.hdfs.qjournal.client.QuorumException: Unable to check if JNs are ready for formatting. 1 exceptions thrown:
192.168.112.113:8485: Call From bigdata112/192.168.112.112 to bigdata113:8485 failed on connection exception: java.net.ConnectException: Connection refused;
第六步:
格式化HDFS(在bigdata112上執行)
hdfs namenode -form
在格式的如果出現其他的異常或者錯誤說明你的配置文件沒有配置正確,仔細認真的刪除掉,重新做上邊的操作
將/root/training/hadoop-3.1.2/tmp拷貝到bigdata113的/root/training/hadoop-3.1.2/tmp下
scp -r dfs/ root@bigdata113:/root/training/hadoop-3.1.2/tmp
第七步
格式話zookeeper
hdfs zkfc -formatZK 這個是爲了在zookeeper上註冊一些關於hadoop的數據
如下是格式話後截取的一部分日誌,就創建了一個/hadoop-ha/ns1的節點在zookeeper上
其實還創建了一個/yarn-leader-election/yrc的節點
2020-07-04 22:51:20,993 INFO zookeeper.ZooKeeper: Initiating client connection, connectString=bigdata112:2181,bigdata113:2181,bigdata114:2181 sessionTimeout=10000 watcher=org.apache.hadoop.ha.ActiveStandbyElector$WatcherWithClientRef@6e171cd7
2020-07-04 22:51:21,018 INFO zookeeper.ClientCnxn: Opening socket connection to server bigdata112/192.168.112.112:2181. Will not attempt to authenticate using SASL (unknown error)
2020-07-04 22:51:21,031 INFO zookeeper.ClientCnxn: Socket connection established to bigdata112/192.168.112.112:2181, initiating session
2020-07-04 22:51:21,062 INFO zookeeper.ClientCnxn: Session establishment complete on server bigdata112/192.168.112.112:2181, sessionid = 0x1731952a4310000, negotiated timeout = 10000
2020-07-04 22:51:21,121 INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/ns1 in ZK.
2020-07-04 22:51:21,132 INFO zookeeper.ZooKeeper: Session: 0x1731952a4310000 closed
2020-07-04 22:51:21,135 WARN ha.ActiveStandbyElector: Ignoring stale result from old client with sessionId 0x1731952a4310000
2020-07-04 22:51:21,135 INFO zookeeper.ClientCnxn: EventThread shut down for session: 0x1731952a4310000
2020-07-04 22:51:21,145 INFO tools.DFSZKFailoverController: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down DFSZKFailoverController at bigdata112/192.168.112.112
************************************************************/
第八步
在bigdata112上啓動Hadoop集羣
start-all.sh
啓動後再每個節點的進程使用jps命令看一下
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

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