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