本文將介紹HA機制的原理,以及Hadoop2 HA配置過程。node
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>
環境變量的添加方法大體相同,如下配置僅供參考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