Hadoop2.7.1配置NameNode+ResourceManager高可用原理分析

關於NameNode高可靠須要配置的文件有core-site.xml和hdfs-site.xml 
關於ResourceManager高可靠須要配置的文件有yarn-site.xml 

邏輯結構: 


 

NameNode-HA工做原理: 
在一個典型的HA集羣中,最好有2臺獨立的機器的來配置NameNode角色,不管在任什麼時候候,集羣中只能有一個NameNode做爲Active狀態,而另外一個是Standby狀態,Active狀態的NameNode負責集羣中全部的客戶端操做,這麼設置的目的,其實HDFS底層的機制是有關係的,同一時刻一個文件,只容許一個寫入方佔用,若是出現多個,那麼文件偏移量便會混亂,從而致使數據格式不可用,固然狀態爲Standby的NameNode這時候僅僅扮演一個Slave的角色,以便於在任什麼時候候Active的NameNode掛掉時,可以第一時間,接替它的任務,成爲主NameNode,達到一個熱備份的效果,在HA架構裏面SecondaryNameNode這個冷備角色已經不存在了,爲了保持從NameNode時時的與主NameNode的元數據保持一致,他們之間交互經過一系列守護的輕量級進程JournalNode,當任何修改操做在主NameNode上執行時,它同時也會記錄修改log到至少半數以上的JornalNode中,這時狀態爲Standby的NameNode監測到JournalNode裏面的同步log發生變化了會讀取JornalNode裏面的修改log,而後同步到本身的的目錄鏡像樹裏面,當發生故障時,Active的NameNode掛掉後,Standby的NameNode會在它成爲Active NameNode前,讀取全部的JournalNode裏面的修改日誌,這樣就能高可靠的保證與掛掉的NameNode的目錄鏡像樹一致,而後無縫的接替它的職責,維護來自客戶端請求,從而達到一個高可用的目的。 

爲了達到快速容錯的掌握全局的目的,Standby角色也會接受來自DataNode角色彙報的塊信息,前面只是介紹了NameNode容錯的工做原理,下面介紹下,當引入Zookeeper以後,爲啥能夠NameNode-HA能夠達到無人值守,自動切換的容錯。 

在主備切換上Zookeeper能夠乾的事: 
(1)失敗探測   在每一個NameNode啓動時,會在Zookeeper上註冊一個持久化的節點,當這個NameNode宕機時,它的會話就會終止,Zookeeper發現以後,就會通知備用的NameNode,Hi,老兄,你該上崗了。 
(2)選舉機制, Zookeeper提供了一個簡單的獨佔鎖,獲取Master的功能,若是那個NameNode發現本身獲得這個鎖,那就預示着,這個NameNode將被激活爲Active狀態 

固然,實際工做中Hadoop提供了ZKFailoverController角色,在每一個NameNode的節點上,簡稱zkfc,它的主要職責以下: 

(1)健康監測,zkfc會週期性的向它監控的NameNode發送健康探測命令,從而來肯定某個NameNode是否處於健康狀態,若是機器宕機,心跳失敗,那麼zkfc就會標記它處於一個不健康的狀態 
(2)會話管理, 若是NameNode是健康的,zkfc就會在zookeeper中保持一個打開的會話,若是NameNode同時仍是Active狀態的,那麼zkfc還會在Zookeeper中佔有一個類型爲短暫類型的znode,當這個NameNode掛掉時, 
這個znode將會被刪除,而後備用的NameNode,將會獲得這把鎖,升級爲主NameNode,同時標記狀態爲Active,當宕機的NameNode,從新啓動時,它會再次註冊zookeper,發現已經有znode鎖了,便會自動變爲Standby狀態,如此往復循環,保證高可靠,須要注意,目前僅僅支持最多配置2個NameNode。 
(3)master選舉,如上所述,經過在zookeeper中維持一個短暫類型的znode,來實現搶佔式的鎖機制,從而判斷那個NameNode爲Active狀態。 

 



core-site.xml裏面 

Xml代碼     收藏代碼
  1. <configuration>  
  2.  <property>  
  3.         <name>fs.default.name</name>  
  4.         <value>hdfs://ns1</value>  
  5.     </property>  
  6.   <property>  
  7.     <name>hadoop.tmp.dir</name>  
  8.     <value>/ROOT/server/data-hadoop/hadooptmp</value>  
  9.   </property>  
  10.   <property>  
  11.              <name>io.compression.codecs</name>  
  12.              <value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.co  
  13. mpress.SnappyCodec</value>  
  14. </property>  
  15. <property>  
  16.   <name>fs.trash.interval</name>  
  17.   <value>0</value>  
  18.   <description>Number of minutes between trash checkpoints.  
  19.   If zero, the trash feature is disabled.  
  20.   </description>  
  21. </property>  
  22.   
  23. <!-- ha的zk的配置 -->  
  24. <property>  
  25.         <name>ha.zookeeper.quorum</name>  
  26.         <value>h1:2181,h2:2181,h3:2181</value>  
  27.     </property>  
  28. </configuration>  



hdfs-site.xml裏面 

Xml代碼     收藏代碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
  3. <!--  
  4.   Licensed under the Apache License, Version 2.0 (the "License");  
  5.   you may not use this file except in compliance with the License.  
  6.   You may obtain a copy of the License at  
  7.   
  8.     http://www.apache.org/licenses/LICENSE-2.0  
  9.   
  10.   Unless required by applicable law or agreed to in writing, software  
  11.   distributed under the License is distributed on an "AS IS" BASIS,  
  12.   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
  13.   See the License for the specific language governing permissions and  
  14.   limitations under the License. See accompanying LICENSE file.  
  15. -->  
  16.   
  17. <!-- Put site-specific property overrides in this file. -->  
  18.   
  19. <configuration>  
  20.   
  21.   
  22.   
  23.   
  24. <property>      
  25.    <name>dfs.replication</name>      
  26.    <value>1</value>      
  27.  </property>      
  28.    
  29. <!-- 集羣數量小於3時,副本數大於1時,建議啓用 -->  
  30.   <!--  <property>  
  31.    <name>dfs.client.block.write.replace-datanode-on-failure.enable</name>  
  32.    <value>false</value>  
  33.    </property>  
  34.    -->  
  35.   
  36.   
  37.   
  38.   
  39.   
  40.    
  41.  <property>      
  42.    <name>dfs.namenode.name.dir</name>      
  43.    <value>file:///ROOT/server/data-hadoop/nd</value>      
  44.  </property>      
  45.     
  46.     
  47.  <property>      
  48.    <name>dfs.datanode.data.dir</name>      
  49.    <value>/ROOT/server/data-hadoop/dd</value>      
  50.  </property>      
  51.     
  52. <property>      
  53.   <name>dfs.permissions</name>      
  54.   <value>false</value>      
  55. </property>    
  56.     
  57.   
  58.   
  59.   <property>  
  60.         <name>dfs.nameservices</name>  
  61.         <value>ns1</value>  
  62.     </property>  
  63.   
  64.   <property>  
  65.         <name>dfs.ha.namenodes.ns1</name>  
  66.         <value>h1,h2</value>  
  67.     </property>  
  68.   
  69.   
  70.   
  71.  <property>  
  72.         <name>dfs.namenode.rpc-address.ns1.h1</name>  
  73.         <value>h1:9000</value>  
  74.     </property>  
  75.   
  76.   
  77.  <property>  
  78.         <name>dfs.namenode.http-address.ns1.h1</name>  
  79.         <value>h1:50070</value>  
  80.     </property>  
  81.   
  82.   
  83.     <property>  
  84.         <name>dfs.namenode.rpc-address.ns1.h2</name>  
  85.         <value>h2:9000</value>  
  86.     </property>     
  87.     
  88.     
  89.     
  90.  <property>  
  91.         <name>dfs.namenode.http-address.ns1.h2</name>  
  92.         <value>h2:50070</value>  
  93.     </property>  
  94.   
  95.   
  96.  <property>  
  97.             <name>dfs.namenode.shared.edits.dir</name>  
  98.             <value>qjournal://h1:8485;h2:8485;h3:8485/ns1</value>  
  99.     </property>  
  100.   
  101.   
  102.   <property>  
  103.         <name>dfs.ha.automatic-failover.enabled.ns1</name>  
  104.         <value>true</value>  
  105.     </property>  
  106.   
  107.   
  108. <property>  
  109.        <name>dfs.client.failover.proxy.provider.ns1</name>  
  110.        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>  
  111.    </property>  
  112.   
  113.   
  114. <property>  
  115.         <name>dfs.journalnode.edits.dir</name>  
  116.         <value>/ROOT/server/data-hadoop/journaldata</value>  
  117.     </property>  
  118.   
  119. <property>  
  120.         <name>dfs.ha.fencing.methods</name>  
  121.         <value>sshfence</value>  
  122.     </property>  
  123.   
  124.   
  125. <property>  
  126.         <name>dfs.ha.fencing.ssh.private-key-files</name>  
  127.         <value>/home/webmaster/.ssh/id_rsa</value>  
  128.     </property>  
  129.   
  130.   
  131.   
  132.   
  133. <property>    
  134.     <name>dfs.webhdfs.enabled</name>    
  135.     <value>true</value>    
  136. </property>    
  137. <property>    
  138.         <name>dfs.blocksize</name>    
  139.         <value>134217728</value>    
  140. </property>    
  141.   
  142. <property>    
  143.         <name>dfs.namenode.handler.count</name>    
  144.         <value>20</value>    
  145. </property>  
  146.     
  147. <property>    
  148.         <name>dfs.datanode.max.xcievers</name>    
  149.         <value>2048</value>    
  150. </property>  
  151.   
  152.   
  153.   
  154.   
  155.   
  156.   
  157. </configuration>  


yarn-site.xml裏面: 
Xml代碼     收藏代碼
  1. <?xml version="1.0"?>  
  2. <!--  
  3.   Licensed under the Apache License, Version 2.0 (the "License");  
  4.   you may not use this file except in compliance with the License.  
  5.   You may obtain a copy of the License at  
  6.   
  7.     http://www.apache.org/licenses/LICENSE-2.0  
  8.   
  9.   Unless required by applicable law or agreed to in writing, software  
  10.   distributed under the License is distributed on an "AS IS" BASIS,  
  11.   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
  12.   See the License for the specific language governing permissions and  
  13.   limitations under the License. See accompanying LICENSE file.  
  14. -->  
  15. <configuration>  
  16.   
  17.   
  18.   
  19.   
  20.   
  21.         <!--啓用RM高可用-->  
  22.    <property>  
  23.        <name>yarn.resourcemanager.ha.enabled</name>  
  24.         <value>true</value>  
  25.    </property>  
  26.   
  27.   
  28.   
  29.        <!--RM集羣標識符-->  
  30.    <property>  
  31.        <name>yarn.resourcemanager.cluster-id</name>  
  32.         <value>ns1</value>  
  33.    </property>  
  34.   
  35.   
  36.  <property>  
  37.         <!--指定兩臺RM主機名標識符-->  
  38.        <name>yarn.resourcemanager.ha.rm-ids</name>  
  39.         <value>h1,h2</value>  
  40.    </property>  
  41.   
  42.   
  43.         <!--RM故障自動切換-->  
  44.    <property>  
  45.         <name>yarn.resourcemanager.ha.automatic-failover.recover.enabled</name>  
  46.         <value>true</value>  
  47.    </property>  
  48.   
  49.   
  50.   <!--RM故障自動恢復-->  
  51.   
  52.      <property>  
  53.        <name>yarn.resourcemanager.recovery.enabled</name>   
  54.         <value>true</value>   
  55.    </property>   
  56.   
  57.   
  58.         <!--RM主機1-->  
  59.    <property>  
  60.        <name>yarn.resourcemanager.hostname.h1</name>  
  61.         <value>h1</value>  
  62.    </property>  
  63.   
  64.      <!--RM主機2-->  
  65.    <property>  
  66.        <name>yarn.resourcemanager.hostname.h2</name>  
  67.         <value>h2</value>  
  68.    </property>  
  69.   
  70.   
  71. <!--RM狀態信息存儲方式,一種基於內存(MemStore),另外一種基於ZK(ZKStore)-->  
  72.     <property>  
  73.        <name>yarn.resourcemanager.store.class</name>  
  74.        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>  
  75.     </property>  
  76.   
  77.   
  78.       <!--使用ZK集羣保存狀態信息-->  
  79.     <property>  
  80.        <name>yarn.resourcemanager.zk-address</name>  
  81.        <value>h1:2181,h2:2181,h3:2181</value>  
  82.     </property>  
  83.   
  84.   
  85.      <!--向RM調度資源地址-->  
  86.     <property>  
  87.        <name>yarn.resourcemanager.scheduler.address.h1</name>  
  88.         <value>h1:8030</value>  
  89.     </property>  
  90.   
  91.   
  92.  <property>  
  93.        <name>yarn.resourcemanager.scheduler.address.h2</name>  
  94.        <value>h2:8030</value>  
  95.     </property>  
  96.   
  97.   
  98.       <!--NodeManager經過該地址交換信息-->  
  99.     <property>  
  100.         <name>yarn.resourcemanager.resource-tracker.address.h1</name>  
  101.        <value>h1:8031</value>  
  102.     </property>  
  103.   
  104.     <property>  
  105.        <name>yarn.resourcemanager.resource-tracker.address.h2</name>  
  106.        <value>h2:8031</value>  
  107.     </property>  
  108.   
  109.   
  110.       <!--客戶端經過該地址向RM提交對應用程序操做-->  
  111.     <property>  
  112.        <name>yarn.resourcemanager.address.h1</name>  
  113.        <value>h1:8032</value>  
  114.     </property>  
  115.     <property>  
  116.        <name>yarn.resourcemanager.address.h2</name>  
  117.        <value>h2:8032</value>  
  118.    </property>      
  119.   
  120.   
  121.         <!--管理員經過該地址向RM發送管理命令-->  
  122.     <property>  
  123.        <name>yarn.resourcemanager.admin.address.h1</name>  
  124.        <value>h1:8033</value>  
  125.     </property>  
  126.   
  127.     <property>  
  128.        <name>yarn.resourcemanager.admin.address.h2</name>  
  129.         <value>h2:8033</value>  
  130.     </property>  
  131.   
  132.   
  133.      <!--RM HTTP訪問地址,查看集羣信息-->  
  134.     <property>  
  135.        <name>yarn.resourcemanager.webapp.address.h1</name>  
  136.        <value>h1:8088</value>  
  137.     </property>  
  138.   
  139.     <property>  
  140.        <name>yarn.resourcemanager.webapp.address.h2</name>  
  141.        <value>h2:8088</value>  
  142.     </property>  
  143.   
  144.   
  145.   <property>    
  146.     <name>yarn.resourcemanager.scheduler.class</name>    
  147.     <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>    
  148.   </property>   
  149.   
  150.   
  151.   
  152.   
  153.   
  154.   <property>    
  155.     <name>yarn.nodemanager.aux-services</name>    
  156.     <value>mapreduce_shuffle</value>    
  157.   </property>    
  158.   
  159.   <property>    
  160.     <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>    
  161.     <value>org.apache.hadoop.mapred.ShuffleHandler</value>    
  162.   </property>    
  163.   
  164.   <property>      
  165.     <description>Classpath for typical applications.</description>      
  166.     <name>yarn.application.classpath</name>      
  167.     <value>$HADOOP_CONF_DIR    
  168.     ,$HADOOP_COMMON_HOME/share/hadoop/common/*    
  169.     ,$HADOOP_COMMON_HOME/share/hadoop/common/lib/*    
  170.     ,$HADOOP_HDFS_HOME/share/hadoop/hdfs/*    
  171.     ,$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*    
  172.     ,$YARN_HOME/share/hadoop/yarn/*</value>      
  173.   </property>     
  174.     
  175. <!-- Configurations for NodeManager -->    
  176.   <property>    
  177.     <name>yarn.nodemanager.resource.memory-mb</name>    
  178.     <value>5632</value>    
  179.   </property>    
  180.   
  181.  <property>  
  182.     <name>yarn.scheduler.minimum-allocation-mb</name>  
  183.     <value>1408</value>  
  184.   </property>  
  185.   
  186.   
  187.  <property>  
  188.     <name>yarn.scheduler.maximum-allocation-mb</name>  
  189.     <value>5632</value>  
  190.   </property>  
  191.   
  192.   
  193.   
  194.   
  195.   
  196. </configuration>  

mapred-site.xml裏面內容 
Xml代碼     收藏代碼
  1. <?xml version="1.0"?>  
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
  3. <!--  
  4.   Licensed under the Apache License, Version 2.0 (the "License");  
  5.   you may not use this file except in compliance with the License.  
  6.   You may obtain a copy of the License at  
  7.   
  8.     http://www.apache.org/licenses/LICENSE-2.0  
  9.   
  10.   Unless required by applicable law or agreed to in writing, software  
  11.   distributed under the License is distributed on an "AS IS" BASIS,  
  12.   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
  13.   See the License for the specific language governing permissions and  
  14.   limitations under the License. See accompanying LICENSE file.  
  15. -->  
  16.   
  17. <!-- Put site-specific property overrides in this file. -->  
  18.   
  19. <configuration>  
  20.   
  21.   
  22.   
  23. <property>    
  24.     <name>mapreduce.framework.name</name>    
  25.     <value>yarn</value>    
  26. </property>    
  27. <property>    
  28.     <name>mapreduce.jobtracker.address</name>    
  29.     <value>h1:8021</value>    
  30. </property>    
  31. <property>    
  32.     <name>mapreduce.jobhistory.address</name>    
  33.     <value>h1:10020</value>    
  34. </property>    
  35. <property>    
  36.     <name>mapreduce.jobhistory.webapp.address</name>    
  37.     <value>h1:19888</value>    
  38. </property>    
  39. <property>    
  40.     <name>mapred.max.maps.per.node</name>    
  41.     <value>2</value>    
  42. </property>    
  43. <property>    
  44.     <name>mapred.max.reduces.per.node</name>    
  45.     <value>1</value>    
  46. </property>    
  47. <property>    
  48.     <name>mapreduce.map.memory.mb</name>    
  49.     <value>1408</value>    
  50. </property>    
  51. <property>    
  52.     <name>mapreduce.map.java.opts</name>    
  53.     <value>-Xmx1126M</value>    
  54. </property>    
  55.     
  56. <property>    
  57.     <name>mapreduce.reduce.memory.mb</name>    
  58.     <value>2816</value>    
  59. </property>    
  60. <property>    
  61.     <name>mapreduce.reduce.java.opts</name>    
  62.     <value>-Xmx2252M</value>    
  63. </property>    
  64. <property>    
  65.     <name>mapreduce.task.io.sort.mb</name>    
  66.     <value>512</value>    
  67. </property>    
  68. <property>    
  69.     <name>mapreduce.task.io.sort.factor</name>    
  70.     <value>100</value>    
  71. </property>    
  72.   
  73.   
  74.   
  75.   
  76.   
  77.   
  78.   
  79. </configuration>  




啓動方式:假設你是新的集羣,若是不是,請參考文末的官網url連接 

1,先在集羣中啓動N/2+1個JornalNode進程,寫ssh腳本執行命令:hadoop-daemon.sh start journalnode 
2 ,而後在第一臺NameNode上應執行hdfs namenode -format格式化集羣 
3,而後在第二臺NameNode上執行hdfs namenode -bootstrapStandby同步第一臺NameNode元數據 
4,在第一臺NameNode上執行命令hdfs zkfc -formatZK格式化zookeeper 
5,第一臺NameNode上啓動zkfc執行命令:hadoop-daemon.sh start zkfc 
6,在第二臺NameNode上啓動zkfc執行命令:hadoop-daemon.sh start zkfc 
7,執行start-dfs.sh啓動全部的NameNode,DataNode,JournalNode(注意若是已經啓動就會跳過) 
8,執分別訪問兩臺機器的50070端口,查看NameNode狀態,其中一個爲Active,一個爲Standby即爲正常 
9,測試容錯,找到狀態爲Active的NameNode的pid進程,並kill掉,查看standby是否會自動晉級爲active,若是 
一切安裝完畢,則會自動切換,若是沒切換,注意查看zkfc和namenode的log 



感謝並參考的文章: 
http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html 
http://lizhenliang.blog.51cto.com/7876557/1661354 
http://www.cnblogs.com/781811964-Fighter/p/4930067.html
相關文章
相關標籤/搜索