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狀態。 
 
node


hdfs-site.xml裏面 

web

Xml代碼  \"收藏代碼\"apache

  1. xml version="1.0" encoding="UTF-8"?>  bootstrap

  2. xml-stylesheet type="text/xsl" href="configuration.xsl"?>  架構


  3.   

  4. << span="">configuration>  app

  5.   

  6.   

  7.   

  8.   

  9. << span="">property>      ssh

  10.    << span="">name>dfs.replicationname>      webapp

  11.    << span="">value>1value>      ide

  12.  property>      oop

  13.    

  14.   

  15.   

  16.    << span="">property>  

  17.        << span="">name>yarn.resourcemanager.ha.enabledname>  

  18.         << span="">value>truevalue>  

  19.    property>  

  20.   

  21.   

  22.   

  23.          

  24.    << span="">property>  

  25.        << span="">name>yarn.resourcemanager.cluster-idname>  

  26.         << span="">value>ns1value>  

  27.    property>  

  28.   

  29.   

  30.  << span="">property>  

  31.           

  32.        << span="">name>yarn.resourcemanager.ha.rm-idsname>  

  33.         << span="">value>h1,h2value>  

  34.    property>  

  35.   

  36.   

  37.           

  38.    << span="">property>  

  39.         << span="">name>yarn.resourcemanager.ha.automatic-failover.recover.enabledname>  

  40.         << span="">value>truevalue>  

  41.    property>  

  42.   

  43.   

  44.     

  45.   

  46.      << span="">property>  

  47.        << span="">name>yarn.resourcemanager.recovery.enabledname>   

  48.         << span="">value>truevalue>   

  49.    property>   

  50.   

  51.   

  52.           

  53.    << span="">property>  

  54.        << span="">name>yarn.resourcemanager.hostname.h1name>  

  55.         << span="">value>h1value>  

  56.    property>  

  57.   

  58.        

  59.    << span="">property>  

  60.        << span="">name>yarn.resourcemanager.hostname.h2name>  

  61.         << span="">value>h2value>  

  62.    property>  

  63.   

  64.   

  65.   

  66.     << span="">property>  

  67.        << span="">name>yarn.resourcemanager.store.classname>  

  68.        << span="">value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStorevalue>  

  69.     property>  

  70.   

  71.   

  72.         

  73.     << span="">property>  

  74.        << span="">name>yarn.resourcemanager.zk-addressname>  

  75.        << span="">value>h1:2181,h2:2181,h3:2181value>  

  76.     property>  

  77.   

  78.   

  79.        

  80.     << span="">property>  

  81.        << span="">name>yarn.resourcemanager.scheduler.address.h1name>  

  82.         << span="">value>h1:8030value>  

  83.     property>  

  84.   

  85.   

  86.  << span="">property>  

  87.        << span="">name>yarn.resourcemanager.scheduler.address.h2name>  

  88.        << span="">value>h2:8030value>  

  89.     property>  

  90.   

  91.   

  92.         

  93.     << span="">property>  

  94.         << span="">name>yarn.resourcemanager.resource-tracker.address.h1name>  

  95.        << span="">value>h1:8031value>  

  96.     property>  

  97.   

  98.     << span="">property>  

  99.        << span="">name>yarn.resourcemanager.resource-tracker.address.h2name>  

  100.        << span="">value>h2:8031value>  

  101.     property>  

  102.   

  103.   

  104.         

  105.     << span="">property>  

  106.        << span="">name>yarn.resourcemanager.address.h1name>  

  107.        << span="">value>h1:8032value>  

  108.     property>  

  109.     << span="">property>  

  110.        << span="">name>yarn.resourcemanager.address.h2name>  

  111.        << span="">value>h2:8032value>  

  112.    property>      

  113.   

  114.   

  115.           

  116.     << span="">property>  

  117.        << span="">name>yarn.resourcemanager.admin.address.h1name>  

  118.        << span="">value>h1:8033value>  

  119.     property>  

  120.   

  121.     << span="">property>  

  122.        << span="">name>yarn.resourcemanager.admin.address.h2name>  

  123.         << span="">value>h2:8033value>  

  124.     property>  

  125.   

  126.   

  127.        

  128.     << span="">property>  

  129.        << span="">name>yarn.resourcemanager.webapp.address.h1name>  

  130.        << span="">value>h1:8088value>  

  131.     property>  

  132.   

  133.     << span="">property>  

  134.        << span="">name>yarn.resourcemanager.webapp.address.h2name>  

  135.        << span="">value>h2:8088value>  

  136.     property>  

  137.   

  138.   

  139.   << span="">property>    

  140.     << span="">name>yarn.resourcemanager.scheduler.classname>    

  141.     << span="">value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulervalue>    

  142.   property>   

  143.   

  144.   

  145.   

  146.   

  147.   

  148.   << span="">property>    

  149.     << span="">name>yarn.nodemanager.aux-servicesname>    

  150.     << span="">value>mapreduce_shufflevalue>    

  151.   property>    

  152.   

  153.   << span="">property>    

  154.     << span="">name>yarn.nodemanager.aux-services.mapreduce.shuffle.classname>    

  155.     << span="">value>org.apache.hadoop.mapred.ShuffleHandlervalue>    

  156.   property>    

  157.   

  158.   << span="">property>      

  159.     << span="">description>Classpath for typical applications.description>      

  160.     << span="">name>yarn.application.classpathname>      

  161.     << span="">value>$HADOOP_CONF_DIR    

  162.     ,$HADOOP_COMMON_HOME/share/hadoop/common/*    

  163.     ,$HADOOP_COMMON_HOME/share/hadoop/common/lib/*    

  164.     ,$HADOOP_HDFS_HOME/share/hadoop/hdfs/*    

  165.     ,$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*    

  166.     ,$YARN_HOME/share/hadoop/yarn/*value>      

  167.   property>     

  168.     

  169.     

  170.   << span="">property>    

  171.     << span="">name>yarn.nodemanager.resource.memory-mbname>    

  172.     << span="">value>5632value>    

  173.   property>    

  174.   

  175.  << span="">property>  

  176.     << span="">name>yarn.scheduler.minimum-allocation-mbname>  

  177.     << span="">value>1408value>  

  178.   property>  

  179.   

  180.   

  181.  << span="">property>  

  182.     << span="">name>yarn.scheduler.maximum-allocation-mbname>  

  183.     << span="">value>5632value>  

  184.   property>  

  185. 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  

相關文章
相關標籤/搜索