1. 如何為大數據處理構建高性能Hadoop集群
越來越多的企業開始使用Hadoop來對大數據進行處理分析,但Hadoop集群的整體性能卻取決於CPU、內存、網路以及存儲之間的性能平衡。而在這篇文章中,我們將探討如何為Hadoop集群構建高性能網路,這是對大數據進行處理分析的關鍵所在。
關於Hadoop
「大數據」是鬆散的數據集合,海量數據的不斷增長迫使企業需要通過一種新的方式去管理。大數據是結構化或非結構化的多種數據類型的大集合。而 Hadoop則是Apache發布的軟體架構,用以分析PB級的非結構化數據,並將其轉換成其他應用程序可管理處理的形式。Hadoop使得對大數據處理成為可能,並能夠幫助企業可從客戶數據之中發掘新的商機。如果能夠進行實時處理或者接近實時處理,那麼其將為許多行業的用戶提供強大的優勢。
Hadoop是基於谷歌的MapRece和分布式文件系統原理而專門設計的,其可在通用的網路和伺服器硬體上進行部署,並使之成為計算集群。
Hadoop模型
Hadoop的工作原理是將一個非常大的數據集切割成一個較小的單元,以能夠被查詢處理。同一個節點的計算資源用於並行查詢處理。當任務處理結束後,其處理結果將被匯總並向用戶報告,或者通過業務分析應用程序處理以進行進一步分析或儀表盤顯示。
為了最大限度地減少處理時間,在此並行架構中,Hadoop「moves jobs to data」,而非像傳統模式那樣「moving data to jobs」。這就意味著,一旦數據存儲在分布式系統之中,在實時搜索、查詢或數據挖掘等操作時,如訪問本地數據,在數據處理過程中,各節點之間將只有一個本地查詢結果,這樣可降低運營開支。
Hadoop的最大特點在於其內置的並行處理和線性擴展能力,提供對大型數據集查詢並生成結果。在結構上,Hadoop主要有兩個部分:
Hadoop分布式文件系統(HDFS)將數據文件切割成數據塊,並將其存儲在多個節點之內,以提供容錯性和高性能。除了大量的多個節點的聚合I/O,性能通常取決於數據塊的大小——如128MB。而傳統的Linux系統下的較為典型的數據塊大小可能是4KB。
MapRece引擎通過JobTracker節點接受來自客戶端的分析工作,採用「分而治之」的方式來將一個較大的任務分解成多個較小的任務,然後分配給各個TaskTrack節點,並採用主站/從站的分布方式(具體如下圖所示):
Hadoop系統有三個主要的功能節點:客戶機、主機和從機。客戶機將數據文件注入到系統之中,從系統中檢索結果,以及通過系統的主機節點提交分析工作等。主機節點有兩個基本作用:管理分布式文件系統中各節點以及從機節點的數據存儲,以及管理Map/Rece從機節點的任務跟蹤分配和任務處理。數據存儲和分析處理的實際性能取決於運行數據節點和任務跟蹤器的從機節點性能,而這些從機節點則由各自的主機節點負責溝通和控制。從節點通常有多個數據塊,並在作業期間被分配處理多個任務。
部署實施Hadoop
各個節點硬體的主要要求是市縣計算、內存、網路以及存儲等四個資源的平衡。目前常用的並被譽為「最佳」的解決方案是採用相對較低成本的舊有硬體,部署足夠多的伺服器以應對任何可能的故障,並部署一個完整機架的系統。
Hadoop模式要求伺服器與SAN或者NAS進行直接連接存儲(DAS)。採用DAS主要有三個原因,在標准化配置的集群中,節點的縮放數以千計,隨著存儲系統的成本、低延遲性以及存儲容量需求不斷提高,簡單配置和部署個主要的考慮因素。隨著極具成本效益的1TB磁碟的普及,可使大型集群的TB級數據存儲在DAS之上。這解決了傳統方法利用SAN進行部署極其昂貴的困境,如此多的存儲將使得Hadoop和數據存儲出現一個令人望而卻步的起始成本。有相當大一部分用戶的Hadoop部署構建都是採用大容量的DAS伺服器,其中數據節點大約1-2TB,名稱控制節點大約在1-5TB之間,具體如下圖所示:
來源:Brad Hedlund, DELL公司
對於大多數的Hadoop部署來說,基礎設施的其他影響因素可能還取決於配件,如伺服器內置的千兆乙太網卡或千兆乙太網交換機。上一代的CPU和內存等硬體的選擇,可根據符合成本模型的需求,採用匹配數據傳輸速率要求的千兆乙太網介面來構建低成本的解決方案。採用萬兆乙太網來部署Hadoop也是相當不錯的選擇。
萬兆乙太網對Hadoop集群的作用
千兆乙太網的性能是制約Hadoop系統整體性能的一個主要因素。使用較大的數據塊大小,例如,如果一個節點發生故障(甚至更糟,整個機架宕機),那麼整個集群就需要對TB級的數據進行恢復,這就有可能會超過千兆乙太網所能提供的網路帶寬,進而使得整個集群性能下降。在擁有成千上萬個節點的大型集群中,當運行某些需要數據節點之間需要進行中間結果再分配的工作負載時,在系統正常運行過程中,某個千兆乙太網設備可能會遭遇網路擁堵。
每一個Hadoop數據節點的目標都必須實現CPU、內存、存儲和網路資源的平衡。如果四者之中的任意一個性能相對較差的話,那麼系統的潛在處理能力都有可能遭遇瓶頸。添加更多的CPU和內存組建,將影響存儲和網路的平衡,如何使Hadoop集群節點在處理數據時更有效率,減少結果,並在Hadoop集群內添加更多的HDFS存儲節點。
幸運的是,影響CPU和內存發展的摩爾定律,同樣也正影響著存儲技術(TB級容量的磁碟)和乙太網技術(從千兆向萬兆甚至更高)的發展。預先升級系統組件(如多核處理器、每節點5-20TB容量的磁碟,64-128GB內存),萬兆乙太網卡和交換機等網路組件是重新平衡資源最合理的選擇。萬兆乙太網將在Hadoop集群證明其價值,高水平的網路利用率將帶來效益更高的帶寬。下圖展示了Hadoop集群與萬兆乙太網的連接:
許多企業級數據中心已經遷移到10GbE網路,以實現伺服器整合和伺服器虛擬化。隨著越來越多企業開始部署Hadoop,他們發現他們完全不必要大批量部署1U的機架伺服器,而是部署更少,但性能更高的伺服器,以方便擴展每個數據節點所能運行的任務數量。很多企業選擇部署2U或4U的伺服器(如戴爾 PowerEdge C2100),每個節點大約12-16個核心以及24TB存儲容量。在這種環境下的合理選擇是充分利用已經部署的10GbE設備和Hadoop集群中的 10GbE網卡。
在日常的IT環境中構建一個簡單的Hadoop集群。可以肯定的是,盡管有很多細節需要微調,但其基礎是非常簡單的。構建一個計算、存儲和網路資源平衡的系統,對項目的成功至關重要。對於擁有密集節點的Hadoop集群而言,萬兆乙太網能夠為計算和存儲資源擴展提供與之相匹配的能力,且不會導致系統整體性能下降。