Hadoop教程:用外部存儲構(gòu)建Hadoop
外部存儲可能適合Hadoop
使用Hadoop驅(qū)動大規(guī)模數(shù)據(jù)的分析并不一定意味著構(gòu)建分布式存儲的集群,一臺好的舊陣列可能是一個更好的選擇。
Hadoop的最初的架構(gòu)設(shè)計是以橫向擴(kuò)展的方式使用相對便宜的商品服務(wù)器及其本地存儲。Hadoop的最初目標(biāo)是對數(shù)據(jù)進(jìn)行符合成本效益的開發(fā)利用,這在以前是行不通的。我們都聽說過大規(guī)模數(shù)據(jù)量、大規(guī)模數(shù)據(jù)類型、大規(guī)模數(shù)據(jù)速度等用于描述這些以前難以處理的數(shù)據(jù)集的詞語??紤]到定義如此廣泛的目標(biāo),大多數(shù)公司都可以指出他們打算開發(fā)利用的某類大規(guī)模數(shù)據(jù)。
大規(guī)模數(shù)據(jù)每天不斷膨脹,存儲廠商憑借其相對昂貴的SAN和網(wǎng)絡(luò)附加存儲(network attached storage,NAS)系統(tǒng),開始參加大規(guī)模數(shù)據(jù)的派對。它們不能把所有這些數(shù)據(jù)留給往機(jī)箱里塞商品磁盤驅(qū)動器的服務(wù)器廠商。盡管采用Hadoop仍處于早期階段,但是競爭和混亂的營銷鼓噪甚囂塵上。
高級別Hadoop和HDFS
在Hadoop的橫向擴(kuò)展設(shè)計中,集群的每個物理節(jié)點(diǎn)都托管了本地計算和數(shù)據(jù)共享;旨在支持經(jīng)常需要穿越大規(guī)模數(shù)據(jù)集的應(yīng)用程序,例如搜索。 Hadoop的很多價值在于:它對橫向擴(kuò)展的集群中的分布式數(shù)據(jù)塊有效地執(zhí)行并行算法(parallel algorithm)的方式。
Hadoop由基于MapRduce的一個計算引擎和一個名為Hadoop 分布式文件系統(tǒng)(Hadoop Distributed File System,HDFS)的數(shù)據(jù)服務(wù)組成。Hadoop利用數(shù)據(jù)的高度“局部性”(locality),使用HDFS把大規(guī)模數(shù)據(jù)集散布到很多節(jié)點(diǎn)上,把并行的計算任務(wù)托付到每一個數(shù)據(jù)節(jié)點(diǎn)(即MapReduce的“映射”(map)部分),隨后進(jìn)行各種各樣的重排和整理合并的步驟而得出結(jié)果。(即“規(guī)約”(reduce)部分)
通常,每個HDFS數(shù)據(jù)節(jié)點(diǎn)將被指派使用DAS磁盤。然后HDFS將向所有的數(shù)據(jù)節(jié)點(diǎn)復(fù)制數(shù)據(jù),通常在不同的數(shù)據(jù)節(jié)點(diǎn)上生成兩到三份的拷貝。復(fù)制的數(shù)據(jù)被放在不同的服務(wù)器節(jié)點(diǎn)上,而第二份復(fù)制的數(shù)據(jù)則放在不同的節(jié)點(diǎn)“機(jī)架”上,以避免機(jī)架級別的損失。
顯然,復(fù)制比RAID占用了更多的原始容量,但是它也具備一些優(yōu)勢,例如避免重建窗口。
為什么使用企業(yè)級存儲?
因此,如果HDFS以一種源于MapReduce式的處理方法輕易地處理了數(shù)據(jù)集的最大部分,使用相對便宜的本地磁盤并提供內(nèi)置的“架構(gòu)感知”復(fù)制,為什么要考慮使用企業(yè)級存儲?舉例來說,在HDFS元數(shù)據(jù)服務(wù)器節(jié)點(diǎn)中仍然有潛在的漏洞。盡管每一個版本的Hadoop在HDFS可靠性方面都做了改善,但是把HDFS元數(shù)據(jù)服務(wù)器用于更可靠的基于RAID的存儲仍有爭議。
備份、保護(hù)或者審計本機(jī)HDFS并非易事。當(dāng)然,NAS和SAN內(nèi)置了極好的數(shù)據(jù)保護(hù)和快照。
把外部共享存儲用于大批數(shù)據(jù)有很多IT方面的原因。首先,盡管Hadoop可以橫向擴(kuò)展處理多個PB的數(shù)據(jù),但是大多數(shù)大規(guī)模數(shù)據(jù)集很可能只有 10TB到50TB的幅度。幾個TB大小的傳統(tǒng)的數(shù)據(jù)集幾乎等于零處理,但恰好在橫向擴(kuò)展的SAN和NAS解決方案的成本效益范圍之內(nèi)。那些共享數(shù)據(jù)集對公司現(xiàn)有業(yè)務(wù)流程而言通常是不可或缺的,相對于HDFS,在企業(yè)級存儲上可以更有效地被控制、管理和集成。
盡管有用于Hadoop生態(tài)系統(tǒng)的具備安全意識的部件(例如Sentry和Accumulo),數(shù)據(jù)安全和數(shù)據(jù)保護(hù)是考慮使用外部存儲的其它主要原因。備份、保護(hù)或者審計本機(jī)HDFS并非易事。當(dāng)然,NAS和SAN內(nèi)置了極好的數(shù)據(jù)保護(hù)和快照。
使用外部企業(yè)級存儲的時候,一款高可用的Hadoop應(yīng)用程序(由于Hadoop逐步形成實(shí)時查詢和流分析功能而變得越來越普遍)可能永遠(yuǎn)無法知道磁盤故障已經(jīng)出現(xiàn)。
用外部存儲構(gòu)建Hadoop,你不僅可以把存儲管理分開,也可以利用獨(dú)立的“增長的載體”(vectors of growth)。毋須增加其它多余的資源就可以容易地增加存儲或者計算。由于與Hadoop的“總量”(gross)復(fù)制相比企業(yè)級RAID解決方案將使用較少的磁盤占用空間,因此也有成本支出方面的優(yōu)勢。
把Hadoop橫向擴(kuò)展節(jié)點(diǎn)部署為虛擬機(jī)允許按需配置,并輕易地擴(kuò)展或縮小集群。
共享是外部存儲的制勝之道,因?yàn)榘汛笠?guī)模數(shù)據(jù)移進(jìn)和移出Hadoop集群具有挑戰(zhàn)性。使用外部存儲的時候,多個應(yīng)用程序和用戶可以通過不通的客戶端訪問相同的“主”數(shù)據(jù)集,甚至在其正在被Hadoop應(yīng)用程序使用的時候進(jìn)行更新和寫數(shù)據(jù)。
虛擬化Hadoop
在虛擬化的Hadoop的場景中,外部存儲也具有優(yōu)勢。我們預(yù)計這將成為在企業(yè)中部署Hadoop的常用方法。把Hadoop橫向擴(kuò)展節(jié)點(diǎn)部署為虛擬機(jī)允許按需配置,并輕易地擴(kuò)展或縮小集群。
多個虛擬Hadoop節(jié)點(diǎn)可以被托管到每個虛擬機(jī)管理程序,并可以輕易地為指定的應(yīng)用程序分配更多或者更少的資源。虛擬機(jī)管理程序級別的高可用(high-availability ,H/A)/容錯功能可以被用于生產(chǎn)級別的Hadoop應(yīng)用程序。性能是一個擔(dān)心,但是更多的資源可以被動態(tài)地應(yīng)用到需要的地方,為某些Hadoop應(yīng)用程序提供即便不是優(yōu)越也是對應(yīng)的性能。
虛擬地存放大規(guī)模數(shù)據(jù)
考慮物理Hadoop架構(gòu)的一個令人信服的理由是避免昂貴的SAN,尤其當(dāng)數(shù)據(jù)集越來越大的時候。然而,在虛擬環(huán)境中,考慮外部存儲可能更適合。一個原因是精簡僅限于計算的虛擬Hadoop集群相當(dāng)簡單,但是,散發(fā)大規(guī)模數(shù)據(jù)集仍將是一項(xiàng)挑戰(zhàn)。通過把數(shù)據(jù)托管到外部共享存儲,精簡虛擬Hadoop的托管就變得幾乎無關(guān)緊要了,而DRS和HA之類的虛擬機(jī)管理程序的功能可以得到充分利用。
由于單個大規(guī)模數(shù)據(jù)集可以輕易地在多個虛擬化的Hadoop集群中被“恰當(dāng)?shù)?rdquo;分享,因此有機(jī)會以相同的存儲為多個客戶端提供服務(wù)。通過消除數(shù)據(jù)集的多個拷貝,減少數(shù)據(jù)遷移的總量,并確保更高的可用性和數(shù)據(jù)保護(hù),作為一款企業(yè)級生產(chǎn)級別的應(yīng)用程序的Hadoop變得更可管理,并輕易地獲得支持。在較少但相對更貴、存儲選項(xiàng)更貴的虛擬服務(wù)器上托管虛擬化Hadoop的TCO仍然會比堅(jiān)持使用專門的商品服務(wù)器物理集群的要低。
如何使用才是關(guān)鍵
與默認(rèn)的DAS選項(xiàng)相比,外部存儲更昂貴,但是這只是與存放數(shù)據(jù)有關(guān)的平衡賬目的“其它”事情而已。關(guān)于使用外部存儲的決定必須以TCO為基礎(chǔ),包括同時考慮數(shù)據(jù)集的傳入來源和端到端的工作流。其它工作負(fù)載可能可以有效地共享一個單一的數(shù)據(jù)資源庫,而現(xiàn)有的資產(chǎn)和技能也可以被利用。另外,高端存儲的攝入、性能、容量或者可伸縮性可能有限制。
作者:李志明