Hadoop2 HA介紹

本文將介紹HA機制的原理,以及Hadoop2 HA配置過程。node

————————————————————————————————————————————————————————————————————
HA機制的原理
      HA中有兩個NameNode:Active NameNode和Standby NameNode。其中Active NN當作主節點,而Standby NN當作備份的主節點,當Active NN崩掉時,能夠將Standby NN切換爲主節點。而Active NN和Standby NN之間的元數據信息經過第三方服務JournalNode進程進行同步。若是Active NN崩潰以後,能夠手動將Standby NameNode切換成Active NameNode,也能夠經過Zookeeper服務進行自動切換。具體以下圖所示:

 

Hadoop2體系結構apache

      Hadoop2的出現是有緣由的。咱們知道 NameNode是核心節點,維護着整個HDFS中的元數據信息,那麼其容量是有限的,受制於服務器的內存空間。當NameNode服務器的內存裝不下數據後,那麼HDFS集羣就裝不下數據了,壽命也就到頭了。所以其擴展性是受限的。HDFS聯盟指的是有多個HDFS集羣同時工做,那麼其容量理論上就不受限了,誇張點說就是無限擴展。你能夠理解成,一個總集羣中,能夠虛擬出兩個或兩個以上的單獨的小集羣,各個小集羣之間數據是實時共享的。由於hadoop集羣中已經不在單獨存在namenode和datanode的概念。當一個其中一個小集羣出故障,能夠啓動另外一個小集羣中的namenode節點,繼續工做。由於數據是實時共享,即便namenode或datanode一塊兒死掉,也不會影響整個集羣的正常工做。服務器

Hadoop2 HA配置app

1. 文件hdfs-site.xmlssh

 1 <configuration>
 2           <property>
 3              <name>dfs.replication</name>
 4              <value>2</value>
 5           </property>  // 指定DataNode存儲block的副本數量
 6           <property>
 7              <name>dfs.permissions</name>
 8              <value>false</value>
 9           </property>
10           <property>
11              <name>dfs.permissions.enabled</name>
12              <value>false</value>
13           </property>
14           <property>    
15              <name>dfs.nameservices</name>  
16              <value>cluster1</value>    
17           </property>  //給hdfs集羣起名字
18           <property>
19             <name>dfs.ha.namenodes.cluster1</name>
20             <value>hadoop1,hadoop2</value>
21           </property>  //指定NameService是cluster1時的namenode
22          <property>
23             <name>dfs.namenode.rpc-address.cluster1.hadoop1</name>
24             <value>hadoop1:9000</value>
25          </property>   //指定hadoop101的RPC地址 
26          <property>    
27            <name>dfs.namenode.http-address.cluster1.hadoop1</name>    
28            <value>hadoop1:50070</value>    
29          </property>   //指定hadoop101的http地址   
30          <property>    
31            <name>dfs.namenode.rpc-address.cluster1.hadoop2</name>    
32            <value>hadoop2:9000</value>    
33          </property>
34          <property>    
35            <name>dfs.namenode.http-address.cluster1.hadoop2</name>    
36            <value>hadoop2:50070</value>   
37          </property>
38          <property>
39            <name>dfs.namenode.servicerpc-address.cluster1.hadoop1</name>
40            <value>hadoop1:53310</value>
41          </property>
42          <property>
43            <name>dfs.namenode.servicerpc-address.cluster1.hadoop2</name>
44            <value>hadoop2:53310</value>
45          </property>
46          <property>  
47            <name>dfs.ha.automatic-failover.enabled.cluster1</name>  
48            <value>true</value>  
49          </property>   //指定cluster1是否啓動自動故障恢復
50         <property>
51        <name>dfs.namenode.shared.edits.dir</name>       <value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485;hadoop4:8485;hadoop5:8485/cluster1</value>
52    </property>   //指定cluster1的兩個NameNode共享edits文件目錄時,使用的JournalNode集羣信息
53        <property>
54  <name>dfs.client.failover.proxy.provider.cluster1</name>       <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
55        </property>  //指定cluster1出故障時,哪一個實現類負責執行故障切換
56      <property>    
57           <name>dfs.journalnode.edits.dir</name>    
58           <value>/home/muzili/yarn/yarn_data/tmp/journal</value>    
59      </property>  //指定JournalNode集羣在對NameNode的目錄進行共享時,本身存儲數據的磁盤路徑
60        <property>    
61           <name>dfs.ha.fencing.methods</name>    
62           <value>sshfence</value>    
63        </property>
64            <property>    
65            <name>dfs.ha.fencing.ssh.private-key-files</name>    
66            <value>/home/muzili/.ssh/id_rsa</value>    
67        </property>
68            <property>
69            <name>dfs.ha.fencing.ssh.connect-timeout</name>
70            <value>10000</value>
71        </property>
72        <property>
73            <name>dfs.namenode.handler.count</name>
74            <value>100</value>
75       </property>
76       </configuration>

2. 文件mapred-site.xmljvm

1      <configuration>
2        <property>
3            <name>mapreduce.framework.name</name>
4            <value>yarn</value>
5       </property>
6      </configuration>  //指定運行mapreduce的環境是yarn,與hadoop1不一樣的地方

3. 文件yarn-site.xmlide

 1     <configuration>
 2       <property>    
 3          <name>yarn.resourcemanager.hostname</name>    
 4          <value>hadoop1</value>    
 5       </property>  //自定義ResourceManager的地址,仍是單點
 6       <property>
 7          <name>yarn.nodemanager.aux-services</name>
 8          <value>mapreduce.shuffle</value>
 9       </property>
10    </configuration>

4. 添加環境變量

       環境變量的添加方法大體相同,如下配置僅供參考oop

 JAVA_HOME=/usr/lib/jvm/jdk1.7.0_51   
 export PATH=$PATH:$JAVA_HOME/bin export HBASE_HOME=/home/muzili/hadoop-2.2.0/app/hbase-0.94.6-cdh4.4.0 export HIVE_HOME=/home/muzili/hadoop-2.2.0/app/hive-0.12.0/ export HADOOP_HOME=/home/muzili/hadoop-2.2.0 export PATH=$PATH:$HBASE_HOME/bin:$HIVE_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar export ZOOKEEPER_HOME=/home/muzili/yarn/hadoop-2.2.0/app/zookeeper-3.4.5 export PATH=$PATH:$ZOOKEEPER_HOME/bin

總結spa

     HA經過引入Standby Namenode,解決了Hadoop1上HDFS單點故障。若是讀者有興趣的話,能夠參考博客,進行HA的配置安裝。code

相關文章
相關標籤/搜索