程 瑩,張云勇,徐 雷,房秉毅
(中國聯通研究院 北京100048)
在Web2.0時代,用戶從信息的消費者變成了信息的生產者,這種用戶參與的模式使得互聯網數據急劇增長,與互聯網誕生時的1969年相比,2009年互聯網數據膨脹了200億倍,而且未來的數據膨脹還在不斷加劇。過去,計算能力被放置在個人計算機或服務器里,但越來越復雜的計算需求以及摩爾定律的消亡使得這樣做的可能性在未來變得微乎其微。Google每天都在吞下并處理整個互聯網,最初,任何一個系統都無法實現這樣的任務。處理如此大規模的數據需求是從未遇到過的,它是隨著互聯網的發展而出現的。然而到了今天,很多行業都有類似的處理海量數據的需求,例如電信運營商的經營賬務系統就面臨這樣的數據壓力[1]。要存儲和處理海量信息,不僅需要高帶寬的網絡基礎設施,還需要處理海量數據的計算和存儲的云計算平臺,可靠地存儲和處理PB級數據。在這樣的背景下,海量數據存儲及計算技術應運而生。
Hadoop是Apache軟件基金會管理的一個項目,它是Google開發的用來支持互聯網級數據處理的MapReduce編程模型和底層文件系統GFS的開源實現[2]。Hadoop可以在大量廉價的硬件設備組成的集群上運行應用程序,為應用程序提供一組穩定可靠的接口,旨在構建一個具有高可靠性和良好擴展性的分布式系統。
Hadoop運行在計算集群上,可以隨時添加或刪除Hadoop集群中的服務器。Hadoop系統會檢測和補償任何服務器上出現的硬件或系統問題。也就是說,Hadoop是自愈系統。在出現系統變化或故障時,它仍可以運行大規模的高性能處理任務。
雖然Hadoop提供了數據存儲和并行處理平臺,但其真正的價值來自于這項技術的組件添加、交叉集成和定制實現。為此,Hadoop還提供了增強平臺功能的子項目,具體如下[3]。
·Hadoop Common:原來的Hadoop Core。這是整個Hadoop項目的核心,其他的Hadoop子項目都是在其基礎上發展而來的。
·Avro:Hadoop的RPC(遠程過程調用)方案。
·Chukwa:管理大型分布式系統的數據采集系統。
·HBase:支持結構化數據存儲的分布式數據庫,是Bigtable的開源實現。
·HDFS:向應用數據提供高吞吐量訪問的分布式文件系統,是GFS的開源實現。
·Hive:提供數據摘要和隨機查詢的數據倉庫基礎設施。
·MapReduce:用于對計算集群上的大型數據集合進行分布式處理的軟件框架,是Google的MapReduce的開源實現。
·Pig:用于并行計算的高級數據流語言和執行框架。
·ZooKeeper:用于解決分布式系統中的一致性問題,是Chubby的開源實現。
在可靠性要求極高的超大規模計算環境中,MapReduce建立了一個清晰的抽象層,解決了大規模數據分析任務和底層系統支撐能力之間存在的矛盾和挑戰。使用MapReduce模型,可以非常容易地實現并行數據處理任務,程序員不必考慮諸如同步、并發、硬件失敗等底層技術細節。
關系型數據庫的索引、關系以及事務處理等系統開銷會限制系統的橫向伸縮性,降低半結構化、非結構化數據的載入和批處理效率。所以,Google刻意舍棄了索引、關系以及事務處理等關系型數據庫的特性,按照“Shared Nothing”的架構原則,從底層開始設計了一個全新的分布式文件系統。
有些關系型數據庫系統也能提供MapReduce功能,允許程序員方便地創建比SQL更加有表達力的查詢,而且不會給數據庫系統本身帶來額外的伸縮性限制。MapReduce自身并不關心關系型數據庫自身的橫向伸縮性挑戰。在處理海量數據的實際應用中,如果需要索引、關系以及事務保障,就要用到數據庫,一個支持MapReduce的數據庫比一個不支持MapReduce的數據庫能提供表達力更強的查詢。
沒有必要用Hadoop替換現有系統,而應利用Hadoop增強現有系統的處理能力。一方面,Hadoop從已有系統上接手一些海量數據處理問題來使得已有系統可以專注處理其設計用來做的事情,比如實時交易數據處理或交互式商業智能,這些海量數據處理問題包括但不限于同步數據吞吐、處理、交換大規模數據等。另一方面,Hadoop可以從任意多的數據源吞入任何類型的數據,可以是結構化數據,也可以是非結構化數據。來自多個數據源的數據可以按任何所需的方式進行合并或聚合,從而可以實現任意一個單一系統均無法處理的深度數據分析。另外,Hadoop的處理結果可以被傳遞給任意現有的與Hadoop無關的企業系統中做進一步處理。
由于Hadoop允許以低成本的方式高效存儲數據,并且其后可以以任意方式處理數據,所以,Hadoop經常會被作為多種數據源的數據池。因為Hadoop不處理索引和關系,所以在Hadoop中存儲數據的時候,就不用考慮將來如何分析這些數據。下面就Hadoop與數據庫及日志系統的交互場景進行簡要分析。
(1)Hadoop與數據庫的交互
Hadoop本身就支持通過JDBC從數據庫中抽取數據。大部分數據庫系統有批量導出、導入功能。無論是哪種情況,將整個數據庫中的數據經常性地或者以增量的方式導入到Hadoop中來都是很容易的。由于數據庫系統存儲的數據減少,數據庫系統的軟件授權成本也會得到降低。圖1是Hadoop與關系型數據庫協同處理計算任務的應用場景。其中,關系型數據庫系統用來處理實時數據,從而保證交易過程中的數據一致性。如果要求同一個數據庫系統從大容量數據中生成復雜的分析報表是極其耗費計算資源的,降低了系統的性能和其處理實時數據工作的能力。Hadoop被設計用來存儲海量數據、按任意方式處理海量數據以及按需向任意系統傳遞數據。數據可以經常性地從關系型數據庫系統導出到Hadoop中,關系型數據庫系統可以經過調整,專門用來處理交互式任務,而復雜的分析工作就可以按離線的方式交由Hadoop來完成,對實施系統沒有任何影響。

(2)Hadoop與日志系統的交互
企業級的Web服務器等系統往往會生成海量的日志數據。這些日志數據通常是半結構化的,而且會隨著時間發生變化。由于這些數據與關系型數據庫并不能很好地匹配,而且在單一機器上需要很長時間進行處理,因此,對日志數據的處理往往比較困難。Hadoop可以非常方便地將海量日志信息從多個系統中提取出來用于后續的數據分析。
Hadoop的一個突出特點是它可以同時將海量數據呈現給組織中的所有人,從而有助于各層次人員使用數據來做出更好的商業決策。
當數據庫管理員設計和優化數據庫時,需要考慮到系統的方方面面,包括數據結構、數據訪問模式、數據視圖、數據報表等,這些前置要求限制了數據庫的查詢類型。既要滿足數據庫的性能要求,又要滿足業務人員不斷提出新的數據查詢需求。使用Hadoop,數據庫管理員可以優化數據庫系統處理核心工作,把數據導出到Hadoop中進行分析處理。
對程序員來說,一旦數據放到Hadoop中,就可以輕松地創建表達力更強的查詢,而不影響生產系統的效率。程序員可以使用Hadoop來建立包括研發系統和業務系統在內的多個數據源的數據管道。
通過提供高層次的接口,對技術不甚了解的產品經理、分析師或者管理層等業務人員,都可以快速地或者點對點地使用企業中的任意數據。
從前面的分析可以看出,Hadoop與關系型數據庫在處理海量數據時各有利弊,可從數據解析、數據壓縮、管道化、數據調度、面向列的存儲幾個方面進行比較[4]。
從對比可以看出,這些差距的來源主要來自于具體實現,而非關系型數據庫模型和MapReduce模型之間的差異。比如,MapReduce可以使用數據庫作為底層的存儲,所以以上分析都針對現實中兩種模式的具體實現。因此,MapReduce和關系型數據庫結合是最好的方案,MapReduce負責數據裝載、轉換等工作,關系型數據庫負責查詢密集型的任務。Hadoop與關系型數據庫可以結合使用于下列場合。
(1)ETL類的應用
Hadoop從關系型數據庫讀取日志信息、分析以及清理日志數據、執行復雜的變換、決定存儲何種屬性,接下來將分析結果存儲到關系型數據庫中。例如在運營商定期的經營分析中,海量的用戶行為數據分析常常需要大量的計算資源,給常規的關系型數據分析系統帶來巨大的計算壓力,這時即可考慮使用MapReduce從關系型數據庫中讀取歷史數據進行分析和計算。
(2)數據挖掘等復雜分析應用
很多復雜數據挖掘類型的應用需要對數據進行多步驟的計算和處理,通常一個程序的輸出會是另外一個程序的輸入,因此很難用單個SQL語句來表示。這種應用場合下,可以采用關系型數據庫保存原始數據信息,同時進行交互式應用,用MapReduce進行后期復雜的分析應用,從而減少多步計算處理對關系型數據庫產生的計算壓力。

表1 Hadoop與關系型數據庫的比較分析
根據對Hadoop的深入分析得知,Hadoop可以吞入任何數據源的任何數據,也可以按任意方式向外部系統傳遞數據,這意味著Hadoop可以用來備份業務系統的全局全量數據,也就是說,Hadoop可以根據自有信息和問題定制,更容易地分析和研究復雜數據,而關系型數據庫擅長處理查詢密集型的計算任務。因此,在實際應用中,企業可以將Hadoop與既有關系型數據庫等IT系統部署在一起,從而能夠以有力的新方式組合新舊數據集合。
1童曉渝,張云勇,戴元順.從公眾通信網向公眾計算通信網演進.電信科學,2010,26(6)
2 Hadoop.URL:http://hadoop.apache.org/
3劉鵬.云計算.北京:電子工業出版社,2010
4 Pavlo A,Paulson E,Rasin A,et al.A comparison of approaches to large-scale data analysis.In:Proceedings of the 35th SIGMOD international conference on Management of data,New York,NY,USA,2009