Hadoop集群選擇合適的硬件配置
為Hadoop集群選擇合適的硬件配置
隨著Apache Hadoop的起步,雲客戶的增多面臨的首要問題就是如何為他們新的的Hadoop集群選擇合適的硬件。
盡管Hadoop被設計為運行在行業標準的硬件上,提出一個理想的集群配置不想提供硬件規格列表那麽簡單。 選擇硬件,為給定的負載在性能和經濟性提供最佳平衡是需要測試和驗證其有效性。(比如,IO密集型工作負載的用戶將會為每個核心主軸投資更多)。
在這個博客帖子中,你將會學到一些工作負載評估的原則和它在硬件選擇中起著至關重要的作用。在這個過程中,你也將學到Hadoop管理員應該考慮到各種因素。
結合存儲和計算
過去的十年,IT組織已經標準化了刀片服務器和存儲區域網(SAN)來滿足聯網和處理密集型的工作負載。盡管這個模型對於一些方面的標準程序是有相當意義 的,比如網站服務器,程序服務器,小型結構化數據庫,數據移動等,但隨著數據數量和用戶數的增長,對於基礎設施的要求也已經改變。網站服務器現在有了緩存 層;數據庫需要本地硬盤支持大規模地並行;數據遷移量也超過了本地可處理的數量。
大部分的團隊還沒有弄清楚實際工作負載需求就開始搭建他們的Hadoop集群。
硬件提供商已經生產了創新性的產品系統來應對這些需求,包括存儲刀片服務器,串行SCSI交換機,外部SATA磁盤陣列和大容量的機架單元。然 而,Hadoop是基於新的實現方法,來存儲和處理復雜數據,並伴隨著數據遷移的減少。 相對於依賴SAN來滿足大容量存儲和可靠性,Hadoop在軟件層次處理大數據和可靠性。
Hadoop在一簇平衡的節點間分派數據並使用同步復制來保證數據可用性和容錯性。因為數據被分發到有計算能力的節點,數據的處理可以被直接發送到存儲有數據的節點。由於Hadoop集群中的每一臺節點都存儲並處理數據,這些節點都需要配置來滿足數據存儲和運算的要求。
工作負載很重要嗎?
在幾乎所有情形下,MapReduce要麽會在從硬盤或者網絡讀取數據時遇到瓶頸(稱為IO受限的應用),要麽在處理數據時遇到瓶頸(CPU受限)。排序是一個IO受限的例子,它需要很少的CPU處理(僅僅是簡單的比較操作),但是需要大量的從硬盤讀寫數據。模式分類是一個CPU受限的例子,它對數據進行復雜的處理,用來判定本體。
下面是更多IO受限的工作負載的例子:
· 索引
· 分組
· 數據導入導出
· 數據移動和轉換
下面是更多CPU受限的工作負載的例子:
· 聚類/分類
· 復雜文本挖掘
· 自然語言處理
· 特征提取
Cloudera的客戶需要完全理解他們的工作負載,這樣才能選擇最優的Hadoop硬件,而這好像是一個雞生蛋蛋生雞的問題。大多數工作組在沒有徹底剖 析他們的工作負載時,就已經搭建好了Hadoop集群,通常Hadoop運行的工作負載隨著他們的精通程度的提高而完全不同。而且,某些工作負載可能會被 一些未預料的原因受限。例如,某些理論上是IO受限的工作負載卻最終成為了CPU受限,這是可能是因為用戶選擇了不同的壓縮算法,或者算法的不同實現改變 了MapReduce任務的約束方式。基於這些原因,當工作組還不熟悉要運行任務的類型時,深入剖析它才是構建平衡的Hadoop集群之前需要做的最合理 的工作。
接下來需要在集群上運行MapReduce基準測試任務,分析它們是如何受限的。完成這個目標最直接的方法是在運行中的工作負載中的適當位置添加監視器來 檢測瓶頸。我們推薦在Hadoop集群上安裝Cloudera Manager,它可以提供CPU,硬盤和網絡負載的實時統計信息。(Cloudera Manager是Cloudera 標準版和企業版的一個組件,其中企業版還支持滾動升級)Cloudera Manager安裝之後,Hadoop管理員就可以運行MapReduce任務並且查看Cloudera Manager的儀表盤,用來監測每臺機器的工作情況。
第一步是弄清楚你的作業組已經擁有了哪些硬件
在為你的工作負載構建合適的集群之外,我們建議客戶和它們的硬件提供商合作確定電力和冷卻方面的預算。由於Hadoop會運行在數十臺,數百臺到數千臺節 點上。通過使用高性能功耗比的硬件,作業組可以節省一大筆資金。硬件提供商通常都會提供監測功耗和冷卻方面的工具和建議。
為你的CDH(Cloudera distribution for Hadoop) Cluster選擇硬件
選擇機器配置類型的第一步就是理解你的運維團隊已經在管理的硬件類型。在購買新的硬件設備時,運維團隊經常根據一定的觀點或者強制需求來選擇,並且他們傾 向於工作在自己業已熟悉的平臺類型上。Hadoop不是唯一的從規模效率上獲益的系統。再一次強調,作為更通用的建議,如果集群是新建立的或者你並不能準 確的預估你的極限工作負載,我們建議你選擇均衡的硬件類型。
Hadoop集群有四種基本任務角色:名稱節點(包括備用名稱節點),工作追蹤節點,任務執行節點,和數據節點。節點是執行某一特定功能的工作站。大部分你的集群內的節點需要執行兩個角色的任務,作為數據節點(數據存儲)和任務執行節點(數據處理)。
這是在一個平衡Hadoop集群中,為數據節點/任務追蹤器提供的推薦規格:
· 在一個磁盤陣列中要有12到24個1~4TB硬盤
· 2個頻率為2~2.5GHz的四核、六核或八核CPU
· 64~512GB的內存
· 有保障的千兆或萬兆以太網(存儲密度越大,需要的網絡吞吐量越高)
名字節點角色負責協調集群上的數據存儲,作業追蹤器協調數據處理(備用的名字節點不應與集群中的名字節點共存,並且運行在與之相同的硬件環境上。)。 Cloudera推薦客戶購買在RAID1或10配置上有足夠功率和企業級磁盤數的商用機器來運行名字節點和作業追蹤器。
NameNode也會直接需要與群集中的數據塊的數量成比列的RAM。一個好的但不精確的規則是對於存儲在分布式文件系統裏面的每一個1百萬的數據塊,分 配1GB的NameNode內存。於在一個群集裏面的100個DataNodes而言,NameNode上的64GB的RAM提供了足夠的空間來保證群集 的增長。我們也推薦把HA同時配置在NameNode和JobTracker上,
這裏就是為NameNode/JobTracker/Standby NameNode節點群推薦的技術細節。驅動器的數量或多或少,將取決於冗余數量的需要。
· 4–6 1TB 硬盤驅動器 采用 一個 JBOD 配置 (1個用於OS, 2個用於文件系統映像[RAID 1], 1個用於Apache ZooKeeper, 1個用於Journal節點)
· 2 4-/16-/8-核心 CPUs, 至少運行於 2-2.5GHz
· 64-128GB 隨機存儲器
· Bonded Gigabit 以太網卡 or 10Gigabit 以太網卡
記住, 在思想上,Hadoop 體系設計為用於一種並行環境。
如果你希望Hadoop集群擴展到20臺機器以上,那麽我們推薦最初配置的集群應分布在兩個機架,而且每個機架都有一個位於機架頂部的10G的以太網交 換。當這個集群跨越多個機架的時候,你將需要添加核心交換機使用40G的以太網來連接位於機架頂部的交換機。兩個邏輯上分離的機架可以讓維護團隊更好地理 解機架內部和機架間通信對網絡需求。
Hadoop集群安裝好後,維護團隊就可以開始確定工作負載,並準備對這些工作負載進行基準測試以確定硬件瓶頸。經過一段時間的基準測試和監視,維護團隊 將會明白如何配置添加的機器。異構的Hadoop集群是很常見的,尤其是在集群中用戶機器的容量和數量不斷增長的時候更常見-因此為你的工作負載所配置的 “不理想”開始時的那組機器不是在浪費時間。Cloudera管理器提供了允許分組管理不同硬件配置的模板,通過這些模板你就可以簡單地管理異構集群了。
下面是針對不同的工作負載所采用對應的各種硬件配置的列表,包括我們最初推薦的“負載均衡”的配置:
· 輕量處理方式的配置(1U的機器):兩個16核的CPU,24-64GB的內存以及8張硬盤(每張1TB或者2TB)。
· 負載均衡方式的配置(1U的機器):兩個16核的CPU,48-128GB的內存以及由主板控制器直接連接的12-16張硬盤(每張1TB或者2TB)。通常在一個2U的櫃子裏使用2個主板和24張硬盤實現相互備份。
· 超大存儲方式的配置(2U的機器):兩個16核的CPU,48-96GB的內存以及16-26張硬盤(每張2TB-4TB)。這種配置在多個節點/機架失效時會產生大量的網絡流量。
· 強力運算方式的配置(2U的機器):兩個16核的CPU,64-512GB的內存以及4-8張硬盤(每張1TB或者2TB)。
(註意Cloudera期望你配置它可以使用的2×8,2×10和2×12核心CPU的配置。)
下圖向你展示了如何根據工作負載來配置一臺機器:
其他要考慮的
記住Hadoop生態系統的設計是考慮了並行環境這點非常重要。當購買處理器時,我們不建議購買最高頻率(GHZ)的芯片,這些芯片都有很高的功耗 (130瓦以上)。這麽做會產生兩個問題:電量消耗會更高和熱量散發會更大。處在中間型號的CPU在頻率、價格和核心數方面性價比是最好的。
當我們碰到生成大量中間數據的應用時-也就是說輸出數據的量和讀入數據的量相等的情況-我們推薦在單個以太網接口卡上啟用兩個端口,或者捆綁兩個以太網 卡,讓每臺機器提供2Gbps的傳輸速率。綁定2Gbps的節點最多可容納的數據量是12TB。一旦你傳輸的數據超過12TB,你將需要使用傳輸速率為捆 綁方式實現的4Gbps(4x1Gbps)。另外,對哪些已經使用10Gb帶寬的以太網或者無線網絡用戶來說,這樣的方案可以用來按照網絡帶寬實現工作負 載的分配。如果你正在考慮切換到10GB的以太網絡上,那麽請確認操作系統和BIOS是否兼容這樣的功能。
當計算需要多少內存的時候,記住Java本身要使用高達10%的內存來管理虛擬機。我們建議把Hadoop配置為只使用堆,這樣就可以避免內存與磁盤之間 的切換。切換大大地降低MapReduce任務的性能,並且可以通過給機器配置更多的內存以及給大多數Linux發布版以適當的內核設置就可以避免這種切 換。
優化內存的通道寬度也是非常重要的。例如,當我們使用雙通道內存時,每臺機器就應當配置成對內存模塊(DIMM)。當我們使用三通道的內存時,每臺機器都應當使用三的倍數個內存模塊(DIMM)。類似地,四通道的內存模塊(DIMM)就應當按四來分組使用內存。
超越MapReduce
Hadoop不僅僅是HDFS和MapReduce;它是一個無所不包的數據平臺。因此CDH包含許多不同的生態系統產品(實際上很少僅僅做為 MapReduce使用)。當你在為集群選型的時候,需要考慮的附加軟件組件包括Apache HBase、Cloudera Impala和Cloudera Search。它們應該都運行在DataNode中來維護數據局部性。
關註資源管理是你成功的關鍵。 |
HBase是一個可靠的列數據存儲系統,它提供一致性、低延遲和隨機讀寫。Cloudera Search解決了CDH中存儲內容的全文本搜索的需求,為新類型用戶簡化了訪問,但是也為Hadoop中新類型數據存儲提供了機會。Cloudera Search基於Apache Lucene/Solr Cloud和Apache Tika,並且為與CDH廣泛集成的搜索擴展了有價值的功能和靈活性。基於Apache協議的Impala項目為Hadoop帶來了可擴展的並行數據庫技 術,使得用戶可以向HDFS和HBase中存儲的數據發起低延遲的SQL查詢,而且不需要數據移動或轉換。
由於垃圾回收器(GC)的超時,HBase 的用戶應該留意堆的大小的限制。別的JVM列存儲也面臨這個問題。因此,我們推薦每一個區域服務器的堆最大不超過16GB。HBase不需要太多別的資源 而運行於Hadoop之上,但是維護一個實時的SLAs,你應該使用多個調度器,比如使用fair and capacity 調度器,並協同Linux Cgroups使用。
Impala使用內存以完成其大多數的功能,在默認的配置下,將最多使用80%的可用RAM資源,所以我們推薦,最少每一個節點使用96GB的RAM。與MapReduce一起使用Impala的用戶,可以參考我們的建議 - “Configuring Impala and MapReduce for Multi-tenant Performance.” 也可以為Impala指定特定進程所需的內存或者特定查詢所需的內存。
搜索是最有趣的訂制大小的組件。推薦的訂制大小的實踐操作是購買一個節點,安裝Solr和Lucene,然後載入你的文檔群。一旦文檔群被以期望的方式來 索引和搜索,可伸縮性將開始作用。持續不斷的載入文檔群,直到索引和查詢的延遲,對於項目而言超出了必要的數值 - 此時,這讓你得到了在可用的資源上每一個節點所能處理的最大文檔數目的基數,以及不包括欲期的集群復制此因素的節點的數量總計基數。
結論
購買合適的硬件,對於一個Hapdoop群集而言,需要性能測試和細心的計劃,從而全面理解工作負荷。然而,Hadoop群集通常是一個形態變化的系統, 而Cloudera建議,在開始的時候,使用負載均衡的技術文檔來部署啟動的硬件。重要的是,記住,當使用多種體系組件的時候,資源的使用將會是多樣的, 而專註與資源管理將會是你成功的關鍵。
我們鼓勵你在留言中,加入你關於配置Hadoop生產群集服務器的經驗!
Kevin O‘Dell 是一個工作於Cloudera的系統工程師。
英文原文:How-to: Select the Right Hardware for Your New Hadoop Cluster
翻譯:http://www.oschina.net/translate/how-to-select-the-right-hardware-for-your-new-hadoop-cluster
附:
淘寶Hadoop集群機器硬件配置
國內外使用Hadoop的公司比較多,全球最大的Hadoop集群在雅虎,有大約25000個節點,主要用於支持廣告系統與網頁搜索。國內用Hadoop的主要有百度、淘寶、騰訊、華為、中國移動等,其中淘寶的Hadoop集群屬於較大的(如果不是最大)。
淘寶Hadoop集群現在超過1700個節點,服務於用於整個阿裏巴巴集團各部門,數據來源於各部門產品的線上數據庫(Oracle, MySQL)備份,系統日誌以及爬蟲數據,截止2011年9月,數量總量已經超過17個PB,每天凈增長20T左右。每天在Hadoop集群運行的MapReduce任務有超過4萬(有時會超過6萬),其中大部分任務是每天定期執行的統計任務,例如數據魔方、量子統計、推薦系統、排行榜等等。這些任務一般在淩晨1點左右開始執行,3-4個小時內全部完成。每天讀數據在2PB左右,寫數據在1PB左右。
this picture is from Taobao
Hadoop包括兩類節點Master和Slave節點,
· Master節點包括Jobtracker,Namenode, SecondName, Standby,
o 硬件配置:16CPU*4核,96G內存。
· Slave節點主要是TaskTracker和DataNode,
o 硬件配置存在一定的差別:8CPU*4核-16CPU*4核,16G-24G內存
o (註:通常是一個slave節點同時是TaskTracker和DataNode,目的是提高數據本地性data locality)。
o 每個slave節點會劃分成12~24個slots。整個集群約34,916個slots,其中Map slots是19,643個,Reduce slots是15,273個
所有作業會進行分成多個Group,按照部門或小組劃分,總共有38個Group。整個集群的資源也是按各個Group進行劃分,定義每個Group的最大並發任務數,Map slots與Reduce slots的使用上限。每個作業只能使用自己組的slots資源。
本文出自 “李世龍” 博客,謝絕轉載!
Hadoop集群選擇合適的硬件配置