設計高可用性、容錯和數據隔離的Hadoop集群

jopen 9年前發布 | 15K 次閱讀 Hadoop

原文  http://www.infoq.com/cn/articles/Hadoop-Cluster

Hadoop不再僅僅是一個時髦詞,它已成為業務需求。數據總是大量涌入,但是在最近,我們可能已經在解鎖這種指數級增長的數據。大數據分析中的 現代技術提供了新的方法來識別和糾正故障、幫助數據挖掘、提供優化反饋,這些方法是無窮無盡的。現代的Hadoop生態系統不僅提供了可靠的分布式聚合系 統,無縫地提供數據的并行處理,同時也通過分析來提供大數據的見解。

<p> 在這篇文章中,我們將研究一種高可用、容錯的Hadoop集群的設計。但首先讓我們潛入到Apache Hadoop的核心部件中,在這之后我們將通過一些修改,來滿足簡約的設計需求列表,即充分發揮底層Apache Hadoop的基礎設施優勢,同時又增加安全性和數據級隔離。那么,讓我們先來談談核心組件(如圖1所示) </p>

<p> <img src="https://simg.open-open.com/show/8ab40db9bcb66a9059d3e9474869b1ee.png" alt="設計高可用性、容錯和數據隔離的Hadoop集群" width="334" height="220" /> </p>

<p> 圖1:Apache的Hadoop的核心組件 </p>

<h2> HDFS集群 </h2>

<p> HDFS集群是由一個NameNode和多個DataNodes組成的主從結構,如圖2所示。NameNode是個數據管理器,負責管理HDFS 文件和塊,還有文件系統的命名空間。該信息作為命名空間鏡像和可編輯的日志永久保存在本地驅動器上。NameNode還存儲非持久性的信息,例如給定文件 中所有塊(block)的位置。 HDFS文件被分成塊,然后復制和存儲在DataNodes上。每個DataNode定期與NameNode同步塊信息。HDFS的架構考慮到 Apache Hadoop的數據存儲、容錯性和防損數據丟失的需要。 </p>

<p> <img src="https://simg.open-open.com/show/10eea99be1509d9e9dbaf2206457dbe0.png" alt="設計高可用性、容錯和數據隔離的Hadoop集群" width="600" height="309" /> </p>

<p> 圖2:HDFS架構 - NameNode(主) - DataNodes(從)配置 </p>

<h2> YARN(YARN應用資源協調)架構 </h2>

<p> MapReduce 2.0或YARN分攤了JobTracker(Hadoop以前版本的作業調度器)中的責任,這樣應用管理和資源管理就分割開來。YARN還可以幫助不同的作業進行調度和監控資源管理。 </p>

<p> ResourceManager是一個全局性的主控的資源仲裁員。ApplicationMaster負責管理不同的用戶應用,每個應用程序對應 一個 ApplicationMaster。因此,你可以有一個ApplicationMaster 對應一個MapReduce應用,而另一個ApplicationMaster對應一個交互式應用,以及其它類似的情況。 JobHistoryServer守護進程負責跟蹤這些應用程序,并記錄其完成。最后,每個節點(node)上還有一個稱為NodeManager(類似 于先前版本的TaskTracker)的從屬邏輯實體,負責跟蹤該節點上運行的任務。 YARN架構照顧了Apache Hadoop數據計算和管理方面的需要。 </p>

<p> <img src="https://simg.open-open.com/show/9242504f6a794a7b850d391c1cd2a6ea.png" alt="設計高可用性、容錯和數據隔離的Hadoop集群" width="576" height="320" /> </p>

<p> 圖3:YARN架構 - ResourceManager中(主) - ApplicationMaster+ NodeManager(主+從)配置 </p>

<p> 現在,我們有了Apache Hadoop核心部件的背景,讓我們快速記下這個簡約的設計需求列表。我會先把它們列舉出來,然后詳細論述在Apache Hadoop 2上如何滿足這些需求。 </p>

<p> 需求: </p>

<ul> 
 <li> 高可用性 - 集群應永遠不會失敗。 </li>

 <li> 安全性 - 集群應涵蓋所有的安全層次 </li>

 <li> 向外擴展 - 最大化(網絡IO)性能并最大限度地減少物理尺寸。 </li>

 <li> 虛擬機上的Hadoop - 彈性、改進的多租戶、提高系統的利用率。 </li>

</ul>

<h2> 高可用性 </h2>

<p> Hadoop 2版本,建立了主備的NameNode配置,以此避免了單點故障。當保守的故障切換控制器(Failover Controller)檢測到故障,它可以讓備用節點接管,讓主用節點退下來(通過“隔離”或“拍其他節點的頭部”)。因為主用和備用的 NameNodes分享了可編輯日志和報告,備用NameNode可以非常迅速地接管。 </p>

<p> 同樣,YARN中ResourceManager也可以支持高可用性。切換控制器是ResourceManager的一部分,它在主用ResourceManager失敗后會讓備用ResourceManager來接管。 </p>

<h2> 安全 </h2>

<p> 每當談論安全,我們談的就是“防御層”(也被稱為“防御環”)。這些層包括認證,授權,審計和數據保護: </p>

<p> 安全 - 身份驗證(Authentication): </p>

<p> 在原生Apache Hadoop中最常見的認證形式就是Kerberos。認證可以是從用戶到服務,例如HTTP認證;或者可以是從服務到服務(代表用戶 - 例如用戶代理;或作為服務,例如客戶端SSL證書)。 </p>

<p> 安全性 - 授權(Authorization): </p>

<p> Apache Hadoop已經提供了類似Unix的文件權限,也有針對Map Reduce任務、YARN的訪問控制列表,等等。 </p>

<p> 安全性 – 責任(Accountability)/審計(Audit): </p>

<p> 問責需要審計日志,原生Apache Hadoop在NameNodes上提供了審計日志,記錄文件的創建、打開,等等。另外,還有一些針對JobTracker、 JobHistoryServer和ResourceManager的歷史記錄。歷史日志記錄了特定集群上運行的所有作業。 </p>

<p> 安全 –數據靜止(Data at Rest)和數據移動(Data in Motion)時的保護: </p>

<p> 在數據靜止時進行加密是很容易做到的,可以使用操作系統所提供的任何加密方法,或者其他硬件級的加密。另一方面,針對移動中數據的加密,需要在配置文件中使能,具體詳述如下: </p>

<p> 通過RPC交互的客戶端,可以啟用SASL(簡單認證和安全層)協議,這通過設置core-site.xml中的 'hadoop.rpc.protection=privacy'完成。注意:JAVA SASL提供不同級別的數據保護(也稱為QOP - 保護質量)。根據所需的質量,用戶可以將保護參數設定為“authentication”表示為僅需要身份認證; “integrity”表示為需要身份認證和數據交換的完整性;“privacy”表示需要添加加密(對稱密鑰)和避免“中間人”(man-in- the-middle)的攻擊。無論完整性檢查和加密都會帶來性能開銷。 </p>

<p> HDFS數據使用的數據傳輸協議(DTP)不使用SASL框架進行認證,從而產生的直接影響是沒有QOP(保護質量)。因此,有必要來包裝DTP 并與SASL進行握手,這可通過在hdfs-site.xml中設置'dfs.encrypt.data.transfer=true'來實現。 </p>

<p> 最后,基于SSL的HTTP只要簡單設置'dfs.https.enable=true',然后在hdfs-site.xml中設定 “dfs.client.https.need-auth=true'就能實現雙向SSL。對于MapReduce的洗牌(Shuffle),SSL可以 通過在mapred-site.xml中設置“mapreduce.shuffle.ssl.enabled=true'來啟用。 </p>

<h2> 向外擴展 </h2>

<p> 雖然Hadoop吹噓僅需要廉價的商用硬件,但Hadoop的數據流量始終是一個大問題。即使你只有一個中等規模的集群,仍會有很多復制流 量,Mappers和Reducers之間也會有數據移動。因此,選用支持集群硬件的網絡骨干網是非常重要的,它可以同時滿足良好的性能和足夠的經濟性, 達到甚至超越向外擴展的需求。 </p>

<p> 在Servergy公司,我們設計這樣一個系統,使用飛思卡爾的QorIQ T4240 64位通信處理器。高能效的Servergy CTS存儲設備(在圖4中示出)具有兩個T4240處理器。每個T4240都有安全協處理器用于加速加密/解密操作。該T4240還擁有四個萬兆以太網端 口和一個20Gig SRIO(serial Rapid IO)端口。 SRIO提供低延遲,高帶寬互連。我們目前的單一集群只使用八個萬兆以太網端口中的四個,每個Servergy CTS設備 - 兩個萬兆以太網端口連接到活動的交換機和其他兩個分別連接到冗余/待機開關,以提供在交換機級別的高可用性,這種構造示于圖5。注意:根據部署我們可以將 萬兆以太網端口綁定以增加帶寬或者使用SRIO低延遲傳輸。 </p>

<p> <img src="https://simg.open-open.com/show/34c553cc3df38117342b6ca3d0222851.jpg" alt="設計高可用性、容錯和數據隔離的Hadoop集群" width="432" height="467" /> </p>

<p> 圖4:Servergy CTS存儲設備框圖 </p>

<p> <img src="https://simg.open-open.com/show/6776182a05d47441ab6d4c9c684ca9d5.jpg" alt="設計高可用性、容錯和數據隔離的Hadoop集群" width="426" height="311" /> </p>

<p> 圖5:CTS設備解決方案: 10x12x2=240核; 480線程 </p>

<h2> 虛擬機上的Hadoop </h2>

<p> 許多在Hadoop集群上的系統不僅處理計算需求,同時也提供數據存儲。因此,如果你正考慮將Hadoop作為一種服務,那么就需要關注數據安 全。進入虛擬化!虛擬化不僅提供了所需的隔離,同時也提供了彈性。虛擬化增強了YARN提供的多租戶特性,并最大限度地提高了資源的利用率和系統的利用 率。除了以上所說,易于部署的也是虛擬化的很大的優勢。 </p>

<p> 跟隨Hadoop的傳統布局,每個虛擬機(VM)可以運行NodeManager/TaskTracker和DataNode,如圖6所示。這種 配置沒有體現虛擬化的所有好處。首先,這種配置并不是真的有彈性;你必須預先為你的(增長)需求進行配置。例如,在緊密配置的集群上任何的數據增長將需要 添加新的節點到集群中,但現在計算資源是空閑的,所以有必要去平衡集群,并且數據計算和數據存儲也沒有分離。 </p>

<p> <img src="https://simg.open-open.com/show/d21f3297814e70f140fc914881b927aa.jpg" alt="設計高可用性、容錯和數據隔離的Hadoop集群" width="452" height="266" /> </p>

<p> 圖6:虛擬機上傳統Hadoop布局 </p>

<p> 為了使其更有彈性,我們可以改變虛擬機的數據和計算配置,設計成更加面向服務的體系結構,將更有利于Hadoop作為一種服務提供者(甚至是基礎設施即服務的提供者)。讓我們來討論兩個新的配置: </p>

<p> <img src="https://simg.open-open.com/show/ad6e982e4e6a94f3a467a21549a66788.jpg" alt="設計高可用性、容錯和數據隔離的Hadoop集群" width="468" height="271" /> </p>

<p> 圖7:虛擬化的Hadoop在SOA(面向服務)架構中配置 </p>

<p> 圖7給出了一種配置,我們有一個虛擬化的DataNode對應了多個NodeManagers/TaskTracker。更多的 NodeManagers可以作為虛擬節點被添加到集群中,這取決于集群的計算需求。因為每個虛擬機都在運行自己的NodeManager,所以這種配置 不僅提供了計算和數據層面的隔離,還提供了巨大的多租戶隔離。關鍵是要找到一個很好的平衡,即在一個給定的主機上,虛擬DataNode對應的虛擬 NodeManagers的數目。這將在很大程度上取決于你的數據,復制因子,應用程序和集群容量。 </p>

<p> 在基礎設施即服務(IaaS)領域的另一種配置獲得了很多的關注,即有持久性數據,并加入虛擬化的計算節點(NodeManagers/ TaskTracker);或者組合數據節點和計算節點來完成集群。這種構造示于圖8。 </p>

<p> <img src="https://simg.open-open.com/show/1d93f6df0e95f5f6f842699f54fffe1d.jpg" alt="設計高可用性、容錯和數據隔離的Hadoop集群" width="467" height="358" /> </p>

<p> 圖8:虛擬化的Hadoop在IaaS(基礎設施即服務)中配置 </p>

<p> 這里的基礎設施需要關注所有的網絡、負載均衡和持久性數據的存儲需要。集群和虛擬機管理器控制負責控制Hadoop集群,后者是由計算的虛擬機 (TaskTracker/NodeManagers)和“DataNode+ NodeManager”組合虛擬機所組成。此配置易于對在云中的HDFS數據進行訪問(當需要計算時),并且也便于數據備份到持久的存儲器中。在這樣的 結構中,沒有必要在云中長時間運行集群,因為所有的數據(原始、分析或挖掘)都會持久的存儲。 </p>

<h2> 作者簡介 </h2>

<p> <img src="https://simg.open-open.com/show/b447f8e3f3b10a80dc38d54a86f7109d.jpg" alt="設計高可用性、容錯和數據隔離的Hadoop集群" width="85" height="100" /> <b>莫妮卡.貝克威思</b> 是軟件性能工程師,在硬件行業工作超過十年。她最新的頭銜是Servergy公司的性能架構師- Servergy是一家技術解決方案的集成公司,專注于數據安全。在Servergy之前,莫妮卡曾在甲骨文/ Sun和AMD為服務器級系統優化JVM。莫妮卡在2013年被JavaOne評為搖滾明星揚聲器(Rock Star speaker @JavaOne)。你可以在推ter(@mon_beck)上跟蹤莫妮卡的信息。 </p>

<p> 查看英文原文: <a href="/misc/goto?guid=4958862463454680464">Designing a Highly Available, Fault Tolerant, Hadoop Cluster with Data Isolation</a> </p>

</div>

</div>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!