1. 程式人生 > >四節點搭建Hadoop HA(高可用)叢集模式

四節點搭建Hadoop HA(高可用)叢集模式

準備工作: 四個節點間的ssh互通,(至少兩個NN節點和其他節點ssh互通); JDK 1.7+,環境變數配置,各節點保持一致; /etc/hosts 節點名對映,各節點保持一致; 保證各元件版本間相容性,推薦使用cdh的jar包

datas : 當做所有軟體的安裝目錄

jars:當做提交jar包的目錄。 文字資料目錄;

software:軟體包目錄

workdata: 軟體包的資料存放目錄

一、關閉防火牆 (永久關閉) chkconfig iptables off chkconfig iptables on 二、解壓Hadoop包,到datas目錄 三、修改配置檔案

1)JAVA環境變數的一些配置(有些是可有可無的)

2)hdfs-site.xml

 <!--指定hdfs的nameservice為st,需要和core-site.xml中的保持一致 --> 
	 <property> 
		<name>dfs.nameservices</name> .
		<value>st</value> 
	</property> 
<!--bi下面有兩個NameNode,分別是nn1,nn2,這兒的nn1,nn2也是邏輯名字,可以自己指定,但是指定後下面的也要隨之改變--> 
	<property> 
		<name>dfs.ha.namenodes.st</name> 
		<value>nn1,nn2</value> 
	</property>
 <!-- nn1的RPC通訊地址 --> 
 <property> 
 <name>dfs.namenode.rpc-address.st.nn1</name>
 <value>node1:9000</value> 
 </property> 
 <!-- nn1的http通訊地址 --> 
 <property> 
 <name>dfs.namenode.http-address.st.nn1</name>
 <value>node1:50070</value> 
 </property> 
 <!-- nn2的RPC通訊地址 --> 
 <property> 
 <name>dfs.namenode.rpc-address.st.nn2</name>
 <value>node2:9000</value>
 </property> 
 <!-- nn2的http通訊地址 --> 
 <property> 
 <name>dfs.namenode.http-address.st.nn2</name> 
 <value>node2:50070</value> 
 </property>
 <!-- 指定NameNode的edits元資料在JournalNode上的存放位置 --> 
 <property> 
 <name>dfs.namenode.shared.edits.dir</name> 
 <value>qjournal://node2:8485;node3:8485;node4:8485/st</value> 
 </property> 
 <!-- 指定JournalNode在本地磁碟存放資料的位置 -->
 <property> 
 <name>dfs.journalnode.edits.dir</name> 
 <value>/root/journaData</value> 
 </property>
 <!-- 開啟NameNode失敗自動切換 --> 
 <property> 
 <name>dfs.ha.automatic-failover.enabled</name>
 <value>true</value> 
 </property> 
 <!-- 配置失敗自動切換實現方式 --> 
 <property> 
 <name>dfs.client.failover.proxy.provider.bi</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_dsa</value> 
 </property>
 <!-- 配置sshfence隔離機制超時時間 -->
 <property> 
 <name>dfs.ha.fencing.ssh.connect-timeout</name> 
 <value>30000</value> 
 </property>
 

3)mapred-site.xml

	<!-- 指定mr框架為yarn方式 -->
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>

4)core-site.xml

<!-- 這兒的st表示兩個namenode組建成的邏輯名字 --> 
<property>
 <name>fs.defaultFS</name> 
 <value>hdfs://st/</value> 
 </property>
 <!-- 指定hadoop臨時目錄 -->
 <property>
 <name>hadoop.tmp.dir</name> 
 <value>/root/hadoopdata</value>
 </property>
 <!-- 指定zookeeper地址 --> 
 <property> 
 <name>ha.zookeeper.quorum</name>
 <value>node1:2181,node2:2181,node3:2181</value> 
 </property>

5)yarn-site.xml

<!-- 開啟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>node1</value>
 </property>
 <property>
	 <name>yarn.resourcemanager.hostname.rm2</name>
	 <value>node2</value>
 </property>
 <!-- 指定zookeeper叢集地址 --> 
 <property> 
	 <name>yarn.resourcemanager.zk-address</name>
	 <value>node1:2181,node2:2181,node3:2181</value>
 </property>
 <property>
	 <name>yarn.nodemanager.aux-services</name>
	 <value>mapreduce_shuffle</value> 
 </property>
 <!--配置RM 啟動後自動恢復狀態 -->
 <property>
	 <name>yarn.resourcemanager.recovery.enabled</name>
	 <value>true</value> 
 </property>
  <!--指定應該通過什麼方式儲存 -->
 <property>
	 <name>yarn.resourcemanager.store.class</name>
	 <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> 
 </property>
 
  <property>
	 <name>yarn.log-aggregation-enable</name>
	 <value>true</value> 
 </property>
 
   <property>
	 <name>yarn.log-aggregation.retain-seconds</name>
	 <value>108600</value> 
 </property>
 

四、配置檔案分發

scp /usr/cdh/datas/hadoop-2.5.0/etc/hadoop/* [email protected]:/usr/cdh/datas/hadoop-2.5.0/etc/hadoop

scp /usr/cdh/datas/hadoop-2.5.0/etc/hadoop/* [email protected]:/usr/cdh/datas/hadoop-2.5.0/etc/hadoop

scp /usr/cdh/datas/hadoop-2.5.0/etc/hadoop/* [email protected]:/usr/cdh/datas/hadoop-2.5.0/etc/hadoop

五、zookeeper叢集配置並啟動(之前的部落格寫過,這裡梳理下步驟)

1)解壓 2)配置zoo.cfg 3)建立myid檔案 4)啟動 5)檢驗 jps bin/zkServer.sh status 用zkCli.sh檢驗資料

六、Hadoop啟動前初始化: 1)在各個JournalNode節點下,輸入命令啟動journalnode服務: sbin/hadoop-daemon.sh start journalnode 2) 在第一個NN節點,格式化原始檔;成功後啟動。 sbin/hdfs namenode -format sbin/hadoop-daemon.sh start namenode 3)去第二個NN節點,同步第一個NN節點的源資料檔案; bin/hdfs namenode -bootstrapStandby 成功後,關閉所有的節點任務。重新啟動JN,然後是NN, ps: 主備切換命令: bin/hdfs haadmin -transitionToActive nn1(nn2) 4)在active節點的NN上,啟動所有DN sbin/hadoop-daemon.sh start datanode -----------------以後可以直接用一條命令啟動hdfs ----------------------------------------------

手動殺掉NN1的程序,實驗主動切換是否生效:

完成了自動故障轉移,切換了NN的active節點。手動恢復後的NN,已經變成了備用節點了

--------------------------------------------------------------------------------------------------- 5)HA yarn啟動前的準備工作           a、關閉HDFS的所有服務(比較煩,沒辦法)cmd: sbin/stop-dfs.sh           b、初始化HA 在zookeeper上的狀態 cmd: bin/hdfs zkfc -formatZK

        

        c、啟動所有的hdfs,可以用start-dfs.sh指令碼啟動(它會自動啟動zkfc)         d、如果是組個啟動的話,哪臺叢集的zkfc先啟動,就會是active的NN,這個zookeeper的選舉機制有關         e、啟動yarn cmd:sbin/start-yarn.sh

      

(內容直接從我筆記裡粘出來的,在這裡不太好編輯,我把原筆記上傳到資源裡。如果部落格看到不太舒服,可以去下載看)