程 瑩,張?jiān)朴?,?雷,房秉毅
(中國聯(lián)通研究院 北京100048)
在Web2.0時(shí)代,用戶從信息的消費(fèi)者變成了信息的生產(chǎn)者,這種用戶參與的模式使得互聯(lián)網(wǎng)數(shù)據(jù)急劇增長,與互聯(lián)網(wǎng)誕生時(shí)的1969年相比,2009年互聯(lián)網(wǎng)數(shù)據(jù)膨脹了200億倍,而且未來的數(shù)據(jù)膨脹還在不斷加劇。過去,計(jì)算能力被放置在個(gè)人計(jì)算機(jī)或服務(wù)器里,但越來越復(fù)雜的計(jì)算需求以及摩爾定律的消亡使得這樣做的可能性在未來變得微乎其微。Google每天都在吞下并處理整個(gè)互聯(lián)網(wǎng),最初,任何一個(gè)系統(tǒng)都無法實(shí)現(xiàn)這樣的任務(wù)。處理如此大規(guī)模的數(shù)據(jù)需求是從未遇到過的,它是隨著互聯(lián)網(wǎng)的發(fā)展而出現(xiàn)的。然而到了今天,很多行業(yè)都有類似的處理海量數(shù)據(jù)的需求,例如電信運(yùn)營商的經(jīng)營賬務(wù)系統(tǒng)就面臨這樣的數(shù)據(jù)壓力[1]。要存儲(chǔ)和處理海量信息,不僅需要高帶寬的網(wǎng)絡(luò)基礎(chǔ)設(shè)施,還需要處理海量數(shù)據(jù)的計(jì)算和存儲(chǔ)的云計(jì)算平臺(tái),可靠地存儲(chǔ)和處理PB級(jí)數(shù)據(jù)。在這樣的背景下,海量數(shù)據(jù)存儲(chǔ)及計(jì)算技術(shù)應(yīng)運(yùn)而生。
Hadoop是Apache軟件基金會(huì)管理的一個(gè)項(xiàng)目,它是Google開發(fā)的用來支持互聯(lián)網(wǎng)級(jí)數(shù)據(jù)處理的MapReduce編程模型和底層文件系統(tǒng)GFS的開源實(shí)現(xiàn)[2]。Hadoop可以在大量廉價(jià)的硬件設(shè)備組成的集群上運(yùn)行應(yīng)用程序,為應(yīng)用程序提供一組穩(wěn)定可靠的接口,旨在構(gòu)建一個(gè)具有高可靠性和良好擴(kuò)展性的分布式系統(tǒng)。
Hadoop運(yùn)行在計(jì)算集群上,可以隨時(shí)添加或刪除Hadoop集群中的服務(wù)器。Hadoop系統(tǒng)會(huì)檢測和補(bǔ)償任何服務(wù)器上出現(xiàn)的硬件或系統(tǒng)問題。也就是說,Hadoop是自愈系統(tǒng)。在出現(xiàn)系統(tǒng)變化或故障時(shí),它仍可以運(yùn)行大規(guī)模的高性能處理任務(wù)。
雖然Hadoop提供了數(shù)據(jù)存儲(chǔ)和并行處理平臺(tái),但其真正的價(jià)值來自于這項(xiàng)技術(shù)的組件添加、交叉集成和定制實(shí)現(xiàn)。為此,Hadoop還提供了增強(qiáng)平臺(tái)功能的子項(xiàng)目,具體如下[3]。
·Hadoop Common:原來的Hadoop Core。這是整個(gè)Hadoop項(xiàng)目的核心,其他的Hadoop子項(xiàng)目都是在其基礎(chǔ)上發(fā)展而來的。
·Avro:Hadoop的RPC(遠(yuǎn)程過程調(diào)用)方案。
·Chukwa:管理大型分布式系統(tǒng)的數(shù)據(jù)采集系統(tǒng)。
·HBase:支持結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的分布式數(shù)據(jù)庫,是Bigtable的開源實(shí)現(xiàn)。
·HDFS:向應(yīng)用數(shù)據(jù)提供高吞吐量訪問的分布式文件系統(tǒng),是GFS的開源實(shí)現(xiàn)。
·Hive:提供數(shù)據(jù)摘要和隨機(jī)查詢的數(shù)據(jù)倉庫基礎(chǔ)設(shè)施。
·MapReduce:用于對(duì)計(jì)算集群上的大型數(shù)據(jù)集合進(jìn)行分布式處理的軟件框架,是Google的MapReduce的開源實(shí)現(xiàn)。
·Pig:用于并行計(jì)算的高級(jí)數(shù)據(jù)流語言和執(zhí)行框架。
·ZooKeeper:用于解決分布式系統(tǒng)中的一致性問題,是Chubby的開源實(shí)現(xiàn)。
在可靠性要求極高的超大規(guī)模計(jì)算環(huán)境中,MapReduce建立了一個(gè)清晰的抽象層,解決了大規(guī)模數(shù)據(jù)分析任務(wù)和底層系統(tǒng)支撐能力之間存在的矛盾和挑戰(zhàn)。使用MapReduce模型,可以非常容易地實(shí)現(xiàn)并行數(shù)據(jù)處理任務(wù),程序員不必考慮諸如同步、并發(fā)、硬件失敗等底層技術(shù)細(xì)節(jié)。
關(guān)系型數(shù)據(jù)庫的索引、關(guān)系以及事務(wù)處理等系統(tǒng)開銷會(huì)限制系統(tǒng)的橫向伸縮性,降低半結(jié)構(gòu)化、非結(jié)構(gòu)化數(shù)據(jù)的載入和批處理效率。所以,Google刻意舍棄了索引、關(guān)系以及事務(wù)處理等關(guān)系型數(shù)據(jù)庫的特性,按照“Shared Nothing”的架構(gòu)原則,從底層開始設(shè)計(jì)了一個(gè)全新的分布式文件系統(tǒng)。
有些關(guān)系型數(shù)據(jù)庫系統(tǒng)也能提供MapReduce功能,允許程序員方便地創(chuàng)建比SQL更加有表達(dá)力的查詢,而且不會(huì)給數(shù)據(jù)庫系統(tǒng)本身帶來額外的伸縮性限制。MapReduce自身并不關(guān)心關(guān)系型數(shù)據(jù)庫自身的橫向伸縮性挑戰(zhàn)。在處理海量數(shù)據(jù)的實(shí)際應(yīng)用中,如果需要索引、關(guān)系以及事務(wù)保障,就要用到數(shù)據(jù)庫,一個(gè)支持MapReduce的數(shù)據(jù)庫比一個(gè)不支持MapReduce的數(shù)據(jù)庫能提供表達(dá)力更強(qiáng)的查詢。
沒有必要用Hadoop替換現(xiàn)有系統(tǒng),而應(yīng)利用Hadoop增強(qiáng)現(xiàn)有系統(tǒng)的處理能力。一方面,Hadoop從已有系統(tǒng)上接手一些海量數(shù)據(jù)處理問題來使得已有系統(tǒng)可以專注處理其設(shè)計(jì)用來做的事情,比如實(shí)時(shí)交易數(shù)據(jù)處理或交互式商業(yè)智能,這些海量數(shù)據(jù)處理問題包括但不限于同步數(shù)據(jù)吞吐、處理、交換大規(guī)模數(shù)據(jù)等。另一方面,Hadoop可以從任意多的數(shù)據(jù)源吞入任何類型的數(shù)據(jù),可以是結(jié)構(gòu)化數(shù)據(jù),也可以是非結(jié)構(gòu)化數(shù)據(jù)。來自多個(gè)數(shù)據(jù)源的數(shù)據(jù)可以按任何所需的方式進(jìn)行合并或聚合,從而可以實(shí)現(xiàn)任意一個(gè)單一系統(tǒng)均無法處理的深度數(shù)據(jù)分析。另外,Hadoop的處理結(jié)果可以被傳遞給任意現(xiàn)有的與Hadoop無關(guān)的企業(yè)系統(tǒng)中做進(jìn)一步處理。
由于Hadoop允許以低成本的方式高效存儲(chǔ)數(shù)據(jù),并且其后可以以任意方式處理數(shù)據(jù),所以,Hadoop經(jīng)常會(huì)被作為多種數(shù)據(jù)源的數(shù)據(jù)池。因?yàn)镠adoop不處理索引和關(guān)系,所以在Hadoop中存儲(chǔ)數(shù)據(jù)的時(shí)候,就不用考慮將來如何分析這些數(shù)據(jù)。下面就Hadoop與數(shù)據(jù)庫及日志系統(tǒng)的交互場景進(jìn)行簡要分析。
(1)Hadoop與數(shù)據(jù)庫的交互
Hadoop本身就支持通過JDBC從數(shù)據(jù)庫中抽取數(shù)據(jù)。大部分?jǐn)?shù)據(jù)庫系統(tǒng)有批量導(dǎo)出、導(dǎo)入功能。無論是哪種情況,將整個(gè)數(shù)據(jù)庫中的數(shù)據(jù)經(jīng)常性地或者以增量的方式導(dǎo)入到Hadoop中來都是很容易的。由于數(shù)據(jù)庫系統(tǒng)存儲(chǔ)的數(shù)據(jù)減少,數(shù)據(jù)庫系統(tǒng)的軟件授權(quán)成本也會(huì)得到降低。圖1是Hadoop與關(guān)系型數(shù)據(jù)庫協(xié)同處理計(jì)算任務(wù)的應(yīng)用場景。其中,關(guān)系型數(shù)據(jù)庫系統(tǒng)用來處理實(shí)時(shí)數(shù)據(jù),從而保證交易過程中的數(shù)據(jù)一致性。如果要求同一個(gè)數(shù)據(jù)庫系統(tǒng)從大容量數(shù)據(jù)中生成復(fù)雜的分析報(bào)表是極其耗費(fèi)計(jì)算資源的,降低了系統(tǒng)的性能和其處理實(shí)時(shí)數(shù)據(jù)工作的能力。Hadoop被設(shè)計(jì)用來存儲(chǔ)海量數(shù)據(jù)、按任意方式處理海量數(shù)據(jù)以及按需向任意系統(tǒng)傳遞數(shù)據(jù)。數(shù)據(jù)可以經(jīng)常性地從關(guān)系型數(shù)據(jù)庫系統(tǒng)導(dǎo)出到Hadoop中,關(guān)系型數(shù)據(jù)庫系統(tǒng)可以經(jīng)過調(diào)整,專門用來處理交互式任務(wù),而復(fù)雜的分析工作就可以按離線的方式交由Hadoop來完成,對(duì)實(shí)施系統(tǒng)沒有任何影響。
(2)Hadoop與日志系統(tǒng)的交互
企業(yè)級(jí)的Web服務(wù)器等系統(tǒng)往往會(huì)生成海量的日志數(shù)據(jù)。這些日志數(shù)據(jù)通常是半結(jié)構(gòu)化的,而且會(huì)隨著時(shí)間發(fā)生變化。由于這些數(shù)據(jù)與關(guān)系型數(shù)據(jù)庫并不能很好地匹配,而且在單一機(jī)器上需要很長時(shí)間進(jìn)行處理,因此,對(duì)日志數(shù)據(jù)的處理往往比較困難。Hadoop可以非常方便地將海量日志信息從多個(gè)系統(tǒng)中提取出來用于后續(xù)的數(shù)據(jù)分析。
Hadoop的一個(gè)突出特點(diǎn)是它可以同時(shí)將海量數(shù)據(jù)呈現(xiàn)給組織中的所有人,從而有助于各層次人員使用數(shù)據(jù)來做出更好的商業(yè)決策。
當(dāng)數(shù)據(jù)庫管理員設(shè)計(jì)和優(yōu)化數(shù)據(jù)庫時(shí),需要考慮到系統(tǒng)的方方面面,包括數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)訪問模式、數(shù)據(jù)視圖、數(shù)據(jù)報(bào)表等,這些前置要求限制了數(shù)據(jù)庫的查詢類型。既要滿足數(shù)據(jù)庫的性能要求,又要滿足業(yè)務(wù)人員不斷提出新的數(shù)據(jù)查詢需求。使用Hadoop,數(shù)據(jù)庫管理員可以優(yōu)化數(shù)據(jù)庫系統(tǒng)處理核心工作,把數(shù)據(jù)導(dǎo)出到Hadoop中進(jìn)行分析處理。
對(duì)程序員來說,一旦數(shù)據(jù)放到Hadoop中,就可以輕松地創(chuàng)建表達(dá)力更強(qiáng)的查詢,而不影響生產(chǎn)系統(tǒng)的效率。程序員可以使用Hadoop來建立包括研發(fā)系統(tǒng)和業(yè)務(wù)系統(tǒng)在內(nèi)的多個(gè)數(shù)據(jù)源的數(shù)據(jù)管道。
通過提供高層次的接口,對(duì)技術(shù)不甚了解的產(chǎn)品經(jīng)理、分析師或者管理層等業(yè)務(wù)人員,都可以快速地或者點(diǎn)對(duì)點(diǎn)地使用企業(yè)中的任意數(shù)據(jù)。
從前面的分析可以看出,Hadoop與關(guān)系型數(shù)據(jù)庫在處理海量數(shù)據(jù)時(shí)各有利弊,可從數(shù)據(jù)解析、數(shù)據(jù)壓縮、管道化、數(shù)據(jù)調(diào)度、面向列的存儲(chǔ)幾個(gè)方面進(jìn)行比較[4]。
從對(duì)比可以看出,這些差距的來源主要來自于具體實(shí)現(xiàn),而非關(guān)系型數(shù)據(jù)庫模型和MapReduce模型之間的差異。比如,MapReduce可以使用數(shù)據(jù)庫作為底層的存儲(chǔ),所以以上分析都針對(duì)現(xiàn)實(shí)中兩種模式的具體實(shí)現(xiàn)。因此,MapReduce和關(guān)系型數(shù)據(jù)庫結(jié)合是最好的方案,MapReduce負(fù)責(zé)數(shù)據(jù)裝載、轉(zhuǎn)換等工作,關(guān)系型數(shù)據(jù)庫負(fù)責(zé)查詢密集型的任務(wù)。Hadoop與關(guān)系型數(shù)據(jù)庫可以結(jié)合使用于下列場合。
(1)ETL類的應(yīng)用
Hadoop從關(guān)系型數(shù)據(jù)庫讀取日志信息、分析以及清理日志數(shù)據(jù)、執(zhí)行復(fù)雜的變換、決定存儲(chǔ)何種屬性,接下來將分析結(jié)果存儲(chǔ)到關(guān)系型數(shù)據(jù)庫中。例如在運(yùn)營商定期的經(jīng)營分析中,海量的用戶行為數(shù)據(jù)分析常常需要大量的計(jì)算資源,給常規(guī)的關(guān)系型數(shù)據(jù)分析系統(tǒng)帶來巨大的計(jì)算壓力,這時(shí)即可考慮使用MapReduce從關(guān)系型數(shù)據(jù)庫中讀取歷史數(shù)據(jù)進(jìn)行分析和計(jì)算。
(2)數(shù)據(jù)挖掘等復(fù)雜分析應(yīng)用
很多復(fù)雜數(shù)據(jù)挖掘類型的應(yīng)用需要對(duì)數(shù)據(jù)進(jìn)行多步驟的計(jì)算和處理,通常一個(gè)程序的輸出會(huì)是另外一個(gè)程序的輸入,因此很難用單個(gè)SQL語句來表示。這種應(yīng)用場合下,可以采用關(guān)系型數(shù)據(jù)庫保存原始數(shù)據(jù)信息,同時(shí)進(jìn)行交互式應(yīng)用,用MapReduce進(jìn)行后期復(fù)雜的分析應(yīng)用,從而減少多步計(jì)算處理對(duì)關(guān)系型數(shù)據(jù)庫產(chǎn)生的計(jì)算壓力。
表1 Hadoop與關(guān)系型數(shù)據(jù)庫的比較分析
根據(jù)對(duì)Hadoop的深入分析得知,Hadoop可以吞入任何數(shù)據(jù)源的任何數(shù)據(jù),也可以按任意方式向外部系統(tǒng)傳遞數(shù)據(jù),這意味著Hadoop可以用來備份業(yè)務(wù)系統(tǒng)的全局全量數(shù)據(jù),也就是說,Hadoop可以根據(jù)自有信息和問題定制,更容易地分析和研究復(fù)雜數(shù)據(jù),而關(guān)系型數(shù)據(jù)庫擅長處理查詢密集型的計(jì)算任務(wù)。因此,在實(shí)際應(yīng)用中,企業(yè)可以將Hadoop與既有關(guān)系型數(shù)據(jù)庫等IT系統(tǒng)部署在一起,從而能夠以有力的新方式組合新舊數(shù)據(jù)集合。
1童曉渝,張?jiān)朴?,戴元?從公眾通信網(wǎng)向公眾計(jì)算通信網(wǎng)演進(jìn).電信科學(xué),2010,26(6)
2 Hadoop.URL:http://hadoop.apache.org/
3劉鵬.云計(jì)算.北京:電子工業(yè)出版社,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