您好,登錄后才能下訂單哦!
關于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狀態。
hdfs-site.xml里面
Xml代碼
xml version="1.0" encoding="UTF-8"?>
xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<< span="">configuration>
<< span="">property>
<< span="">name>dfs.replicationname>
<< span="">value>1value>
property>
<< span="">property>
<< span="">name>yarn.resourcemanager.ha.enabledname>
<< span="">value>truevalue>
property>
<< span="">property>
<< span="">name>yarn.resourcemanager.cluster-idname>
<< span="">value>ns1value>
property>
<< span="">property>
<< span="">name>yarn.resourcemanager.ha.rm-idsname>
<< span="">value>h2,h3value>
property>
<< span="">property>
<< span="">name>yarn.resourcemanager.ha.automatic-failover.recover.enabledname>
<< span="">value>truevalue>
property>
<< span="">property>
<< span="">name>yarn.resourcemanager.recovery.enabledname>
<< span="">value>truevalue>
property>
<< span="">property>
<< span="">name>yarn.resourcemanager.hostname.h2name>
<< span="">value>h2value>
property>
<< span="">property>
<< span="">name>yarn.resourcemanager.hostname.h3name>
<< span="">value>h3value>
property>
<< span="">property>
<< span="">name>yarn.resourcemanager.store.classname>
<< span="">value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStorevalue>
property>
<< span="">property>
<< span="">name>yarn.resourcemanager.zk-addressname>
<< span="">value>h2:2181,h3:2181,h4:2181value>
property>
<< span="">property>
<< span="">name>yarn.resourcemanager.scheduler.address.h2name>
<< span="">value>h2:8030value>
property>
<< span="">property>
<< span="">name>yarn.resourcemanager.scheduler.address.h3name>
<< span="">value>h3:8030value>
property>
<< span="">property>
<< span="">name>yarn.resourcemanager.resource-tracker.address.h2name>
<< span="">value>h2:8031value>
property>
<< span="">property>
<< span="">name>yarn.resourcemanager.resource-tracker.address.h3name>
<< span="">value>h3:8031value>
property>
<< span="">property>
<< span="">name>yarn.resourcemanager.address.h2name>
<< span="">value>h2:8032value>
property>
<< span="">property>
<< span="">name>yarn.resourcemanager.address.h3name>
<< span="">value>h3:8032value>
property>
<< span="">property>
<< span="">name>yarn.resourcemanager.admin.address.h2name>
<< span="">value>h2:8033value>
property>
<< span="">property>
<< span="">name>yarn.resourcemanager.admin.address.h3name>
<< span="">value>h3:8033value>
property>
<< span="">property>
<< span="">name>yarn.resourcemanager.webapp.address.h2name>
<< span="">value>h2:8088value>
property>
<< span="">property>
<< span="">name>yarn.resourcemanager.webapp.address.h3name>
<< span="">value>h3:8088value>
property>
<< span="">property>
<< span="">name>yarn.resourcemanager.scheduler.classname>
<< span="">value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulervalue>
property>
<< span="">property>
<< span="">name>yarn.nodemanager.aux-servicesname>
<< span="">value>mapreduce_shufflevalue>
property>
<< span="">property>
<< span="">name>yarn.nodemanager.aux-services.mapreduce.shuffle.classname>
<< span="">value>org.apache.hadoop.mapred.ShuffleHandlervalue>
property>
<< span="">property>
<< span="">description>Classpath for typical applications.description>
<< span="">name>yarn.application.classpathname>
<< span="">value>$HADOOP_CONF_DIR
,$HADOOP_COMMON_HOME/share/hadoop/common/*
,$HADOOP_COMMON_HOME/share/hadoop/common/lib/*
,$HADOOP_HDFS_HOME/share/hadoop/hdfs/*
,$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*
,$YARN_HOME/share/hadoop/yarn/*value>
property>
<< span="">property>
<< span="">name>yarn.nodemanager.resource.memory-mbname>
<< span="">value>5632value>
property>
<< span="">property>
<< span="">name>yarn.scheduler.minimum-allocation-mbname>
<< span="">value>1408value>
property>
<< span="">property>
<< span="">name>yarn.scheduler.maximum-allocation-mbname>
<< span="">value>5632value>
property>
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
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。