hadoop之 Hadoop2.2.0中HDFS的高可用性實現原理
在Hadoop2.0.0之前,NameNode(NN)在HDFS叢集中存在單點故障(single point of failure),每一個叢集中存在一個NameNode,如果NN所在的機器出現了故障,那麼將導致整個叢集無法利用,直到NN重啟或者在另一臺主機上啟動NN守護執行緒。
主要在兩方面影響了HDFS的可用性:
(1)、在不可預測的情況下,如果NN所在的機器崩潰了,整個叢集將無法利用,直到NN被重新啟動;
(2)、在可預知的情況下,比如NN所在的機器硬體或者軟體需要升級,將導致叢集當機。
HDFS的高可用性將通過在同一個叢集中執行兩個NN(active NN & standby NN)來解決上面兩個問題,這種方案允許在機器破潰或者機器維護快速地啟用一個新的NN來恢復故障。
在典型的HA叢集中,通常有兩臺不同的機器充當NN。在任何時間,只有一臺機器處於Active狀態;另一臺機器是處於Standby狀態。Active NN負責叢集中所有客戶端的操作;而Standby NN主要用於備用,它主要維持足夠的狀態,如果必要,可以提供快速的故障恢復。
為了讓Standby NN的狀態和Active NN保持同步,即後設資料保持一致,它們都將會和JournalNodes守護程式通訊。當Active NN執行任何有關名稱空間的修改,它需要持久化到一半以上的JournalNodes上(通過edits log持久化儲存),而Standby NN負責觀察edits log的變化,它能夠讀取從JNs中讀取edits資訊,並更新其內部的名稱空間。一旦Active NN出現故障,Standby NN將會保證從JNs中讀出了全部的Edits,然後切換成Active狀態。Standby NN讀取全部的edits可確保發生故障轉移之前,是和Active NN擁有完全同步的名稱空間狀態。
為了提供快速的故障恢復,Standby NN也需要儲存叢集中各個檔案塊的儲存位置。為了實現這個,叢集中所有的Database將配置好Active NN和Standby NN的位置,並向它們傳送塊檔案所在的位置及心跳,如下圖所示:
![](https://i.iter01.com/images/7e0f8a0699da0f84b4c6811e49880ce31545cbbee376be730d7687ed7b927d57.png)
在任何時候,叢集中只有一個NN處於Active 狀態是極其重要的。否則,在兩個Active NN的狀態下NameSpace狀態將會出現分歧,這將會導致資料的丟失及其它不正確的結果。為了保證這種情況不會發生,在任何時間,JNs只允許一個NN充當writer。在故障恢復期間,將要變成Active 狀態的NN將取得writer的角色,並阻止另外一個NN繼續處於Active狀態。
為了部署HA叢集,你需要準備以下事項:
(1)、NameNode machines:執行Active NN和Standby NN的機器需要相同的硬體配置;
(2)、JournalNode machines:也就是執行JN的機器。JN守護程式相對來說比較輕量,所以這些守護程式可以可其他守護執行緒(比如NN,YARN ResourceManager)執行在同一臺機器上。在一個叢集中,最少要執行3個JN守護程式,這將使得系統有一定的容錯能力。當然,你也可以執行3個以上的JN,但是為了增加系統的容錯能力,你應該執行奇數個JN(3、5、7等),當執行N個JN,系統將最多容忍(N-1)/2個JN崩潰。
在HA叢集中,Standby NN也執行namespace狀態的checkpoints,所以不必要執行Secondary NN、CheckpointNode和BackupNode;事實上,執行這些守護程式是錯誤的。
source : https://www.iteblog.com/archives/833.html#comments
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2144604/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Hadoop原理之——HDFS原理Hadoop
- Hadoop面試題之HDFSHadoop面試題
- Hadoop框架:HDFS高可用環境配置Hadoop框架
- Hadoop 基礎之 HDFS 入門Hadoop
- Hadoop系列之HDFS 資料塊Hadoop
- Hadoop–HDFSHadoop
- Hadoop官網翻譯之HDFS ArchitectureHadoop
- Hadoop HDFS(一)Hadoop
- Hadoop HDFS(二)Hadoop
- Hadoop入門(二)之 HDFS 詳細解析Hadoop
- Hadoop官網翻譯之HDFS Users GuideHadoopGUIIDE
- Hadoop起步之圖解SSH、免密登入原理和實現Hadoop圖解
- Hadoop大資料實戰系列文章之HDFS檔案系統Hadoop大資料
- 高可用服務之Keepalived利用指令碼實現服務的可用性檢測指令碼
- 雲中SQL Server高可用性最佳實踐SQLServer
- Hadoop之HDFS檔案讀寫流程說明Hadoop
- Hadoop 學習系列(二)之 HDFS 詳細解析Hadoop
- HDFS 命令:用於管理HDFS的Hadoop Shell命令大全Hadoop
- hadoop實戰4--(hdfs讀流程,hdfs寫流程,副本放置策略)Hadoop
- Hadoop的HDFS架構入門Hadoop架構
- 【HDFS】HADOOP DISTRIBUTED FILE SYSTEMHadoop
- Hadoop(十)HDFS API操作HadoopAPI
- 使用 MaxScale 實現資料庫的高可用性和彈性資料庫
- 小白學習大資料測試之hadoop hdfs和MapReduce小實戰大資料Hadoop
- GitHub 的 MySQL 高可用性實踐分享GithubMySql
- SQL Server中的高可用性概覽SQLServer
- Nginx 實現高併發的原理分析Nginx
- hadoop學習-HDFS的詳細概述Hadoop
- CentOS6.5實現Hadoop_2.8.1編譯及HDFS偽分散式部署CentOSHadoop編譯分散式
- 09 大資料之Hadoop(第四部 HDFS)大資料Hadoop
- Hadoop HDFS 設計隨想Hadoop
- hadoop hdfs 常用命令Hadoop
- Hadoop KMS配置(HDFS透明加密)Hadoop加密
- Hadoop學習筆記—HDFSHadoop筆記
- hadoop-HDFS優缺點Hadoop
- API閘道器實現高可用性7種技術API
- 黑猴子的家:Hadoop NameNode 高可用 (High Availability) 實現解析HadoopAI
- HDFS 09 - HDFS NameNode 的高可用機制
- Hadoop學習之路(十)HDFS API的使用HadoopAPI