国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

天璣大數(shù)據(jù)引擎及其應(yīng)用

2014-07-19 11:22程學(xué)旗
集成技術(shù) 2014年4期
關(guān)鍵詞:天璣開(kāi)源分布式

查 禮 程學(xué)旗

(中國(guó)科學(xué)院計(jì)算技術(shù)研究所網(wǎng)絡(luò)數(shù)據(jù)科學(xué)與工程重點(diǎn)實(shí)驗(yàn)室 北京 100190)

天璣大數(shù)據(jù)引擎及其應(yīng)用

查 禮 程學(xué)旗

(中國(guó)科學(xué)院計(jì)算技術(shù)研究所網(wǎng)絡(luò)數(shù)據(jù)科學(xué)與工程重點(diǎn)實(shí)驗(yàn)室 北京 100190)

大數(shù)據(jù)計(jì)算面對(duì)的是傳統(tǒng) IT 技術(shù)無(wú)法處理的數(shù)據(jù)量超大規(guī)模、服務(wù)請(qǐng)求高吞吐量和數(shù)據(jù)類型異質(zhì)多樣的挑戰(zhàn)。得益于國(guó)內(nèi)外各大互聯(lián)網(wǎng)公司的實(shí)際應(yīng)用和開(kāi)源代碼貢獻(xiàn),Apache Hadoop 軟件已成為 PB 量級(jí)大數(shù)據(jù)處理的成熟技術(shù)和事實(shí)標(biāo)準(zhǔn),并且圍繞不同類型大數(shù)據(jù)處理需求的軟件生態(tài)環(huán)境已經(jīng)建立起來(lái)。文章介紹了大數(shù)據(jù)計(jì)算系統(tǒng)中存儲(chǔ)、索引和壓縮解壓縮的硬件加速三項(xiàng)研究工作,即 RCFile、CCIndex 和 SwiftFS,有效解決了大數(shù)據(jù)計(jì)算系統(tǒng)的存儲(chǔ)空間問(wèn)題和查詢性能等問(wèn)題。這些研究成果已形成關(guān)鍵技術(shù)并集成在天璣大數(shù)據(jù)引擎軟件棧中,直接支持了淘寶和騰訊公司的多個(gè)生產(chǎn)性應(yīng)用。

大數(shù)據(jù)引擎;數(shù)據(jù)存儲(chǔ);行列混合;聚簇索引

1 引 言

近年來(lái),越來(lái)越多的國(guó)內(nèi)外互聯(lián)網(wǎng)公司和傳統(tǒng)企業(yè)都已意識(shí)到數(shù)據(jù)資產(chǎn)規(guī)?;瘞?lái)的潛在價(jià)值。這些呈爆炸性增長(zhǎng)的數(shù)據(jù)資產(chǎn)的類型以非結(jié)構(gòu)化和半結(jié)構(gòu)化為主,如何低成本且高效率地存儲(chǔ)和處理 PB1至 EB2量級(jí)的數(shù)據(jù)成為業(yè)界面臨的極大挑戰(zhàn)。谷歌(Google)公司陸續(xù)提出了 MapReduce[1]編程框架,GFS3Google File System,谷歌公司為了存儲(chǔ)海量搜索數(shù)據(jù)而設(shè)計(jì)的專用文件系統(tǒng)文件系統(tǒng)[2]以及BigTable[3]存儲(chǔ)系統(tǒng),從而成為大數(shù)據(jù)處理技術(shù)的開(kāi)拓者和領(lǐng)導(dǎo)者。而源于這三項(xiàng)技術(shù)的 Apache Hadoop[4]等開(kāi)源項(xiàng)目則成為大數(shù)據(jù)處理技術(shù)的事實(shí)標(biāo)準(zhǔn),迅速推廣應(yīng)用于國(guó)內(nèi)外各大互聯(lián)網(wǎng)企業(yè),成為 PB 量級(jí)大數(shù)據(jù)處理的成熟技術(shù)和系統(tǒng)。天璣大數(shù)據(jù)引擎是構(gòu)建在 Hadoop 之上的面向大數(shù)據(jù)計(jì)算(Big Data Computing)的工具集,其中包含了很多天璣團(tuán)隊(duì)既有的研究成果。這些研究成果已在互聯(lián)網(wǎng)公司實(shí)際生產(chǎn)系統(tǒng)上經(jīng)受住考驗(yàn),如 RCFile 已應(yīng)用到 Facebook(臉書(shū))公司、CCIndex 已應(yīng)用于淘寶網(wǎng)的“數(shù)據(jù)魔方”、ICTBase 已應(yīng)用到騰訊“廣點(diǎn)通”等。這些關(guān)鍵技術(shù)構(gòu)成了天璣大數(shù)據(jù)引擎的核心競(jìng)爭(zhēng)力,軟件的生態(tài)環(huán)境也借由開(kāi)源社區(qū)得到良性發(fā)展。

2 大數(shù)據(jù)技術(shù)現(xiàn)狀與發(fā)展趨勢(shì)

什么是大數(shù)據(jù)?麥肯錫公司的報(bào)告《大數(shù)據(jù):創(chuàng)新、競(jìng)爭(zhēng)和生產(chǎn)力的下一個(gè)前沿領(lǐng)域》中給出的大數(shù)據(jù)定義是:大數(shù)據(jù)指的是規(guī)模超過(guò)現(xiàn)有數(shù)據(jù)庫(kù)工具獲取、存儲(chǔ)、管理和分析能力的數(shù)據(jù)集,并強(qiáng)調(diào)并不是超過(guò)某個(gè)特定數(shù)量級(jí)的數(shù)據(jù)集才是大數(shù)據(jù)。國(guó)際數(shù)據(jù)公司(IDC)用四個(gè)維度的特征來(lái)定義大數(shù)據(jù),即數(shù)據(jù)集的規(guī)模(Volume)、數(shù)據(jù)流動(dòng)的速度(Velocity)、數(shù)據(jù)類型的多少(Variety)和數(shù)據(jù)價(jià)值的大小(Value)。亞馬遜的大數(shù)據(jù)科學(xué)家 John Rauser 的定義比較直接:“超過(guò)單臺(tái)計(jì)算機(jī)處理能力的數(shù)據(jù)量則為大數(shù)據(jù)”。最后我們來(lái)看看維基百科上的大數(shù)據(jù)定義:大數(shù)據(jù)指的是數(shù)據(jù)規(guī)模龐大和復(fù)雜到難以通過(guò)現(xiàn)有的數(shù)據(jù)庫(kù)管理工具或者傳統(tǒng)的數(shù)據(jù)處理應(yīng)用程序進(jìn)行處理的數(shù)據(jù)集合。

上述大數(shù)據(jù)的概念中無(wú)一例外地都突出了“大”字。從表面上看,數(shù)據(jù)規(guī)模的增長(zhǎng)的確為處理數(shù)據(jù)帶來(lái)了很大的問(wèn)題。具體來(lái)說(shuō),在同樣時(shí)間內(nèi)獲取與以前相同價(jià)值的數(shù)據(jù)變得不可為了。換言之,本質(zhì)問(wèn)題是數(shù)據(jù)的價(jià)值密度變低了,數(shù)據(jù)交換速率變慢了,所以催生了很多新型數(shù)據(jù)處理技術(shù)和工具,如 Google 的谷歌文件系統(tǒng)(GFS)和 MapReduce、Apache Hadoop 生態(tài)系統(tǒng)、美國(guó)伯克利大學(xué) AMPLab 的 Spark 等。同時(shí)出現(xiàn)了對(duì)時(shí)間敏感程度不同的計(jì)算模式,如批式計(jì)算模式、交互式計(jì)算模式、流計(jì)算模式和實(shí)時(shí)計(jì)算模式等。計(jì)算模式的差異決定了獲取價(jià)值的技術(shù)不同,其選用取決于上層業(yè)務(wù)需求。實(shí)際上,所謂大數(shù)據(jù)問(wèn)題的本質(zhì)應(yīng)是數(shù)據(jù)的資產(chǎn)化和服務(wù)化,而挖掘數(shù)據(jù)的內(nèi)在價(jià)值是研究大數(shù)據(jù)的最終目標(biāo)。如何解決數(shù)據(jù)資產(chǎn)化和價(jià)值挖掘問(wèn)題,以及如何保證需求挑戰(zhàn)和技術(shù)選型之間的平衡已經(jīng)成為業(yè)界關(guān)注的焦點(diǎn)。

2.1 谷 歌

谷歌在搜索引擎上所獲得的巨大成功,很大程度上是由于采用了先進(jìn)的大數(shù)據(jù)管理和處理技術(shù)。這些技術(shù)是針對(duì)搜索引擎所面臨的日益膨脹的海量數(shù)據(jù)存儲(chǔ)問(wèn)題以及在此之上的海量數(shù)據(jù)處理問(wèn)題而設(shè)計(jì)的。

針對(duì)內(nèi)部網(wǎng)絡(luò)數(shù)據(jù)規(guī)模超大的特點(diǎn),谷歌提出了一整套基于分布式并行集群方式的基礎(chǔ)架構(gòu)技術(shù),利用軟件處理集群中經(jīng)常發(fā)生的節(jié)點(diǎn)失效問(wèn)題。谷歌使用的大數(shù)據(jù)平臺(tái)包括四個(gè)相互獨(dú)立又緊密結(jié)合在一起的系統(tǒng):GFS、針對(duì)谷歌應(yīng)用程序的特點(diǎn)提出的 MapReduce 編程模式、分布式的鎖機(jī)制 Chubby 以及大規(guī)模分布式數(shù)據(jù)庫(kù)BigTable。

GFS 是一個(gè)大型的分布式文件系統(tǒng),它為谷歌云計(jì)算提供海量存儲(chǔ),并且與 Chubby、MapReduce 和 BigTable 等技術(shù)結(jié)合得十分緊密,處于系統(tǒng)的底層。它與傳統(tǒng)的分布式文件系統(tǒng)有許多相同的目標(biāo),例如性能、可伸縮性、可靠性以及可用性。除此之外,它的設(shè)計(jì)還受到谷歌應(yīng)用負(fù)載和技術(shù)環(huán)境的影響。相對(duì)于傳統(tǒng)的分布式文件系統(tǒng),為了達(dá)到成本、可靠性和性能的最佳平衡,GFS 從多個(gè)方面進(jìn)行了簡(jiǎn)化:(1)采用集中式元數(shù)據(jù)管理;(2)不緩存數(shù)據(jù);(3)在用戶態(tài)下實(shí)現(xiàn);(4)只提供專用接口。另外,GFS 還將節(jié)點(diǎn)失效視為系統(tǒng)的常態(tài),提供了極強(qiáng)的系統(tǒng)容錯(cuò)功能;設(shè)置三個(gè)數(shù)據(jù)塊副本,以增強(qiáng)數(shù)據(jù)可靠性;使用了鏈?zhǔn)綄?xiě)和版本控制的雙重保證,以確保數(shù)據(jù)一致性,即數(shù)據(jù)塊的所有在線副本組成一條寫(xiě)更新鏈,用戶進(jìn)行寫(xiě)操作時(shí),數(shù)據(jù)鏈?zhǔn)綄?xiě)入所有副本,當(dāng)鏈上的所有副本都完成更新后,寫(xiě)操作才會(huì)成功,并更新對(duì)應(yīng)數(shù)據(jù)塊的版本號(hào)。

MapReduce 是處理海量數(shù)據(jù)的并行編程模式,用于大規(guī)模數(shù)據(jù)集的并行運(yùn)算。MapReduce通過(guò)“Map(映射)”和“Reduce(化簡(jiǎn))”這兩個(gè)簡(jiǎn)單的概念來(lái)參加運(yùn)算。用戶只需要提供自己的Map 函數(shù)以及 Reduce 函數(shù)就可以在集群上進(jìn)行大規(guī)模的分布式數(shù)據(jù)處理。這一編程環(huán)境能夠使程序設(shè)計(jì)人員在編寫(xiě)大規(guī)模的并行應(yīng)用程序時(shí)不用考慮集群的可靠性和可擴(kuò)展性等問(wèn)題。應(yīng)用程序編寫(xiě)人員只需要將精力放在應(yīng)用程序本身,關(guān)于集群的處理問(wèn)題則交由平臺(tái)來(lái)完成。與傳統(tǒng)的分布式程序設(shè)計(jì)相比,MapReduce 封裝了并行處理、容錯(cuò)處理、本地化計(jì)算和負(fù)載均衡等細(xì)節(jié),具有簡(jiǎn)單而強(qiáng)大的接口。正是由于 MapReduce 具有函數(shù)式編程語(yǔ)言和矢量編程語(yǔ)言的共性,使得這種編程模式特別適合于非結(jié)構(gòu)化和結(jié)構(gòu)化的海量數(shù)據(jù)的搜索、挖掘和分析等應(yīng)用。

Chubby 是提供粗粒度鎖服務(wù)的一個(gè)文件系統(tǒng),它基于松耦合分布式文件系統(tǒng)設(shè)計(jì)可靠的存儲(chǔ),解決了分布的一致性問(wèn)題。這種鎖只是一個(gè)建議性的鎖而不是強(qiáng)制性的鎖。通過(guò)使用Chubby 的鎖服務(wù),用戶可以確保數(shù)據(jù)操作過(guò)程中的一致性。GFS 使用 Chubby 來(lái)選取一個(gè) GFS主服務(wù)器,BigTable 使用 Chubby 指定一個(gè)主服務(wù)器并發(fā)現(xiàn)和控制與其相關(guān)的子表服務(wù)器。

大規(guī)模分布式數(shù)據(jù)庫(kù) BigTable 是基于 GFS和 Chubby 開(kāi)發(fā)的分布式存儲(chǔ)系統(tǒng)。很多應(yīng)用程序?qū)τ跀?shù)據(jù)的組織是非常有規(guī)則的。一般來(lái)說(shuō),數(shù)據(jù)庫(kù)對(duì)于處理格式化的數(shù)據(jù)是非常方便的,但是由于關(guān)系數(shù)據(jù)庫(kù)要求很強(qiáng)的一致性,很難將其擴(kuò)展到很大的規(guī)模。為了處理谷歌內(nèi)部大量的格式化以及半格式化數(shù)據(jù),谷歌構(gòu)建了弱一致性要求的大規(guī)模數(shù)據(jù)庫(kù)系統(tǒng) BigTable。BigTable 在很多方面和數(shù)據(jù)庫(kù)類似,但它并不是真正意義上的數(shù)據(jù)庫(kù)。而谷歌包括 Web 索引和衛(wèi)星圖像數(shù)據(jù)等在內(nèi)的很多海量結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù)都是存儲(chǔ)在 BigTable 中的。BigTable 的內(nèi)容按照行來(lái)劃分,將多個(gè)行組成一個(gè)小表(Tablet),保存到某一個(gè)服務(wù)器節(jié)點(diǎn)中。

2.2 Hadoop

Apache Nutch 是 Hadoop 的源頭。該項(xiàng)目始于 2002 年,是 Apache Lucene 的子項(xiàng)目之一。當(dāng)時(shí)的系統(tǒng)架構(gòu)尚無(wú)法擴(kuò)展到存儲(chǔ)并處理?yè)碛袛?shù)十億網(wǎng)頁(yè)的網(wǎng)絡(luò)化數(shù)據(jù)。谷歌于 2003 年在SOSP4Symposium on Operating Systems Principles,操作系統(tǒng)原理會(huì)議上公開(kāi)了描述其分布式文件系統(tǒng)的論文The Google File System(《谷歌文件系統(tǒng)》),為Nutch 提供了及時(shí)的幫助。2004 年,Nutch 的分布式文件系統(tǒng)(NDFS5Nutch Distributed File System)開(kāi)始研發(fā)。同年,谷歌在OSDI6Operating Systems Design and Implementation,操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)國(guó)際會(huì)議上發(fā)表了題為 MapReduce: Simpli fi ed Data Processing onLarge Clusters(《MapReduce—簡(jiǎn)化的大規(guī)模集群數(shù)據(jù)處理》)的論文,受到啟發(fā)的道●卡廷(Doug Cutting)等人開(kāi)始實(shí)現(xiàn) MapReduce計(jì)算框架,并與 NDFS(Nutch Distributed File System)結(jié)合起來(lái),共同支持 Nutch 的主要算法。至 2006 年,這個(gè)框架逐漸成為一套完整而獨(dú)立的軟件,命名為 Hadoop。2008 年初,Hadoop 成為 Apache 的頂級(jí)項(xiàng)目,不僅用于雅虎(Yahoo! ),還在眾多互聯(lián)網(wǎng)企業(yè)得以應(yīng)用。

Hadoop 的核心由兩部分組成:HDFS 和MapReduce,其中 HDFS 是 Google GFS 的開(kāi)源版本,是一個(gè)高可靠的分布式文件系統(tǒng)。它能夠提供高吞吐率的數(shù)據(jù)訪問(wèn)能力,適合存儲(chǔ)海量(PB 級(jí))數(shù)據(jù),其實(shí)現(xiàn)原理如圖 1 所示。

HDFS 全部在用戶態(tài)使用 Java 語(yǔ)言編寫(xiě)。目錄節(jié)點(diǎn)(NameNode,也是主節(jié)點(diǎn))在系統(tǒng)中只有一個(gè)實(shí)例,采用鍵值(Key-Value)全內(nèi)存式管理模式,用于管理文件系統(tǒng)的元數(shù)據(jù)。元數(shù)據(jù)包括名字空間、副本數(shù)量及位置與文件到塊的映射關(guān)系。數(shù)據(jù)節(jié)點(diǎn)(DataNode)負(fù)責(zé)固定大小數(shù)據(jù)塊的存儲(chǔ)(通常為64 MB)。一個(gè)文件(home/foo/data)由存儲(chǔ)在多個(gè)數(shù)據(jù)節(jié)點(diǎn)上的數(shù)據(jù)塊構(gòu)成,客戶端訪問(wèn)數(shù)據(jù)時(shí)經(jīng)由目錄節(jié)點(diǎn)獲得數(shù)據(jù)塊的存儲(chǔ)位置,再與數(shù)據(jù)塊所在的數(shù)據(jù)節(jié)點(diǎn)交互,寫(xiě)入或讀出數(shù)據(jù)。

MapReduce 計(jì)算框架實(shí)現(xiàn)了由谷歌工程師提出的 MapReduce 編程模型,其原理如圖 2 所示。

圖 1 HDFS 組成及實(shí)現(xiàn)原理Fig. 1. Implementation principle and components of HDFS

圖 2 MapReduce 編程模型示意圖Fig. 2. Programming model of MapReduce

當(dāng)一個(gè) MapReduce 作業(yè)提交給 Hadoop 集群時(shí),相關(guān)的輸入數(shù)據(jù)將首先被劃分為多個(gè)片斷,然后由作業(yè)跟蹤程序(Job Tracker)挑選空閑的任務(wù)跟蹤器(Task Tracker)對(duì)數(shù)據(jù)片斷并行地執(zhí)行 Map 任務(wù)。接著這些由 Map 任務(wù)產(chǎn)生的中間記錄會(huì)被再次劃分并由作業(yè)跟蹤程序挑選空閑的任務(wù)跟蹤器對(duì)它們并行地執(zhí)行 Reduce 任務(wù),從而獲得和每個(gè)鍵值相對(duì)應(yīng)的數(shù)據(jù)集合作為運(yùn)算結(jié)果。這樣的過(guò)程將被反復(fù)執(zhí)行,直到 MapReduce作業(yè)中所有的 Map 任務(wù)和 Reduce 任務(wù)執(zhí)行完畢。

雖然在 Hadoop 中有名的是 MapReduce 及其分布式文件系統(tǒng) HDFS,但還有其他關(guān)聯(lián)項(xiàng)目支持開(kāi)發(fā)的工具提供配套和補(bǔ)充性服務(wù)。這些關(guān)聯(lián)項(xiàng)目之間的關(guān)系如圖 3 所示。各關(guān)聯(lián)項(xiàng)目的特征如下:

(1)HDFS:以塊數(shù)據(jù)為單位存儲(chǔ)并具有副本機(jī)制的分布式文件系統(tǒng);

(2)MapReduce:分布式數(shù)據(jù)處理模式和執(zhí)行環(huán)境;

(3)Hive:分布式數(shù)據(jù)倉(cāng)庫(kù),用于管理 HDFS中存儲(chǔ)的數(shù)據(jù),并提供基于 SQL 的查詢語(yǔ)言(由運(yùn)行時(shí)解釋引擎轉(zhuǎn)換為 MapReduce 作業(yè))用以查詢數(shù)據(jù);

(4)Mahout:其主要目標(biāo)是構(gòu)建可擴(kuò)展的機(jī)器學(xué)習(xí)算法庫(kù),目前主要支持三種類型用例,推薦、聚類和分類;

(5)Pig:一種運(yùn)行在 MapReduce 和 HDFS 的集群上的高層(High Level)數(shù)據(jù)流語(yǔ)言和運(yùn)行環(huán)境,用以檢索海量數(shù)據(jù)集;

(6)Oozie:一個(gè)對(duì) Hadoop 上運(yùn)行作業(yè)進(jìn)行管理的工作流調(diào)度器系統(tǒng)。Oozie 工作流是放置在 DAG(有向無(wú)環(huán)圖 Direct Acyclic Graph)中的一組動(dòng)作(例如,Hadoop 的 Map/Reduce 作業(yè)、Pig 作業(yè)等),其中指定了動(dòng)作執(zhí)行的順序。使用hPDL(一種 XML 流程定義語(yǔ)言)來(lái)描述 DAG;

圖 3 Apache Hadoop 生態(tài)系統(tǒng)構(gòu)成示意圖Fig. 3. Apache Hadoop ecosystem

(7)HBase:一個(gè)分布式列存儲(chǔ)數(shù)據(jù)庫(kù),使用HDFS 作為底層存儲(chǔ),同時(shí)支持 MapReduce 的批式計(jì)算和點(diǎn)查詢(隨機(jī)讀取);

(8)ZooKeeper:一個(gè)分布式高可用的協(xié)同服務(wù),提供分布式鎖相關(guān)的基本服務(wù),用于支持分布式應(yīng)用的構(gòu)建;

(9)Flume:一個(gè)高性能的日志收集系統(tǒng),具有分布式、高可靠、高可用等特點(diǎn),支持對(duì)海量日志采集、聚合和傳輸。Flume 支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送端,同時(shí),F(xiàn)lume 提供對(duì)數(shù)據(jù)的簡(jiǎn)單處理,并具有分發(fā)到各數(shù)據(jù)接收端的能力;

(10)Sqoop:一個(gè)可將 Hadoop 和關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù)相互遷移的工具??蓪㈥P(guān)系數(shù)據(jù)庫(kù)(例如 MySQL、Oracle、Postgres 等)中的數(shù)據(jù)導(dǎo)入到 Hadoop 的 HDFS 中,也可以將 HDFS 的數(shù)據(jù)導(dǎo)入到指定的關(guān)系數(shù)據(jù)庫(kù)中;

(11)Ambari:一個(gè)基于 Web 的 Hadoop 機(jī)群管理和監(jiān)控工具。Ambari 目前已支持大多數(shù)Hadoop 組件,包括 HDFS、MapReduce、Hive、Pig、HBase、Zookeeper、Sqoop 和 Hcatalog 等。

2.3 Spark

Apache Spark 是由加州大學(xué)伯克利分校 AMP實(shí)驗(yàn)室(Algorithms, Machines and People Lab)于2011 年啟動(dòng)研發(fā)的分布式大數(shù)據(jù)計(jì)算軟件棧。如圖 4 所示,Spark 與 Hadoop 具有很多相似和相融之處,比如兩者均可定位為面向大數(shù)據(jù)的分布式計(jì)算系統(tǒng),Spark 目前還依賴 Hadoop 中的 HDFS 作為數(shù)據(jù)存儲(chǔ)等。Spark 比 Hadoop 優(yōu)越的地方在于可以支持多種類型負(fù)載。換句話說(shuō),Spark 可以同時(shí)支持批式、流式、迭代和實(shí)時(shí)這四種大數(shù)據(jù)計(jì)算模式。Spark 的核心技術(shù)和創(chuàng)新在于引入名為彈性分布式數(shù)據(jù)集(Resilient Distributed Dataset,RDD)的系統(tǒng)抽象。RDD 是分布在一組節(jié)點(diǎn)中的只讀對(duì)象集合。Spark 對(duì) RDD 的操作有兩種類型,即轉(zhuǎn)換操作(Transformations)和行動(dòng)操作(Actions)。不像Hadoop 只提供了 Map 和 Reduce 兩種計(jì)算方式,轉(zhuǎn)換操作包括 map、filter、flatMap、sample、groupByKey、reduceByKey、union、join、cogroup、mapValues、sort 和 partionBy 等;行動(dòng)操作包括 count、collect、reduce、lookup 和 save等。因?yàn)?RDD 為只讀,所以轉(zhuǎn)換操作會(huì)生成一個(gè)新的 RDD,但并不是立即執(zhí)行這個(gè)計(jì)算,只有遇到行動(dòng)操作的時(shí)候才會(huì)真正進(jìn)行計(jì)算。這種設(shè)計(jì)使得 Spark 可以更加高效地運(yùn)行。

圖 4 Spark 與 Hadoop 生態(tài)系統(tǒng)間的關(guān)聯(lián)關(guān)系Fig. 4. Apache Stack and Hadoop software stack comparison

為了充分利用機(jī)群的聚合 I/O 能力,需要對(duì) RDD 進(jìn)行分區(qū),以便數(shù)據(jù)分散存儲(chǔ)到機(jī)群的各個(gè)服務(wù)器上,這時(shí)會(huì)根據(jù)記錄的主鍵進(jìn)行分區(qū)(如 Hash 分區(qū))。RDD 根據(jù) useDisk、useMemory、deserialized 和 replication 四個(gè)參數(shù)的組合可以提供 11 種存儲(chǔ)級(jí)別。RDD 可以全部裝載到內(nèi)存中,每次 RDD 的轉(zhuǎn)換操作結(jié)果都可以存放到內(nèi)存中,而下一個(gè)轉(zhuǎn)換操作可以直接從內(nèi)存中輸入,省去了 MapReduce 大量的磁盤(pán) I/O操作。這對(duì)于迭代運(yùn)算比較常見(jiàn)的機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘算法來(lái)說(shuō),系統(tǒng)性能提升很大。RDD 都是可序列化的,當(dāng)前 RDD 默認(rèn)存儲(chǔ)于內(nèi)存,但當(dāng)內(nèi)存不足時(shí),RDD 會(huì)自動(dòng)溢出到磁盤(pán),這一過(guò)程對(duì)編程人員以及最終用戶來(lái)說(shuō)是透明的。為了保證 RDD 中數(shù)據(jù)的可靠性,RDD 數(shù)據(jù)集通過(guò)所謂的血統(tǒng)關(guān)系(Lineage)記住了它是如何從其他 RDD 中演變過(guò)來(lái)的。相比其他系統(tǒng)的細(xì)顆粒度內(nèi)存數(shù)據(jù)更新級(jí)別的備份或者 LOG 機(jī)制,RDD 的 Lineage 記錄的是粗顆粒度的特定數(shù)據(jù)轉(zhuǎn)換操作。當(dāng)這個(gè) RDD 的部分分區(qū)數(shù)據(jù)丟失時(shí),它可以通過(guò) Lineage 獲取足夠的信息來(lái)重新運(yùn)算和恢復(fù)丟失的數(shù)據(jù)分區(qū)。這種粗顆粒的數(shù)據(jù)模型,會(huì)限制 Spark 的適用場(chǎng)景,但同時(shí)相比細(xì)顆粒度的數(shù)據(jù)模型,也帶來(lái)了性能的提升。

Spark 使用 Scala 開(kāi)發(fā),默認(rèn)使用 Scala 作為編程語(yǔ)言。編寫(xiě) Spark 程序比編寫(xiě) Hadoop MapReduce 程序要簡(jiǎn)單得多,寫(xiě) Spark 程序的一般步驟就是創(chuàng)建或使用(SparkContext)實(shí)例,使用 SparkContext 創(chuàng)建 RDD,然后就是對(duì) RDD 進(jìn)行轉(zhuǎn)換操作或行動(dòng)操作。Spark 中的應(yīng)用程序稱為驅(qū)動(dòng)程序,可以在單節(jié)點(diǎn)上或機(jī)群上執(zhí)行。對(duì)于機(jī)群執(zhí)行,Spark 依賴于 Mesos 資源管理器。Mesos 為上層應(yīng)用提供了必要的分布式資源管理與調(diào)度功能。

2.4 發(fā)展趨勢(shì)

從當(dāng)今 IT 技術(shù)的發(fā)展角度看,提出系統(tǒng)結(jié)構(gòu)上的解決方案是“應(yīng)用驅(qū)動(dòng)的大數(shù)據(jù)架構(gòu)與技術(shù)”。也就是說(shuō)根據(jù)具體類型應(yīng)用的需求,在系統(tǒng)架構(gòu)和關(guān)鍵技術(shù)上進(jìn)行創(chuàng)新。為了降低成本并獲得更好的能效,大數(shù)據(jù)應(yīng)用系統(tǒng)越來(lái)越趨向扁平化和專用化的系統(tǒng)架構(gòu)和數(shù)據(jù)處理技術(shù),逐漸擺脫了傳統(tǒng)的通用技術(shù)體系。這讓傳統(tǒng)的應(yīng)用服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器和存儲(chǔ)服務(wù)器這樣的典型三層架構(gòu)受到極大的沖擊。應(yīng)用開(kāi)發(fā)人員更深入地理解計(jì)算機(jī)系統(tǒng)結(jié)構(gòu),“程序”=“算法”+“數(shù)據(jù)結(jié)構(gòu)”將逐漸演變成“程序”=“算法”+“數(shù)據(jù)結(jié)構(gòu)”+“系統(tǒng)結(jié)構(gòu)”。

2.4.1 大數(shù)據(jù)技術(shù)生態(tài)環(huán)境范圍擴(kuò)大

克隆了 Google 的 GFS 和 MapReduce 的Apache Hadoop 自 2008 年以來(lái)逐漸被互聯(lián)網(wǎng)企業(yè)接納,并成為大數(shù)據(jù)處理領(lǐng)域的事實(shí)標(biāo)準(zhǔn)。但2013 年出現(xiàn)的 Spark 作為一匹黑馬可以說(shuō)終結(jié)了這一神話,大數(shù)據(jù)技術(shù)不再一家獨(dú)大。由于應(yīng)用不同導(dǎo)致 Hadoop 一套軟件系統(tǒng)不可能滿足所有需求,在全面兼容 Hadoop 的基礎(chǔ)上,Spark 通過(guò)更多的利用內(nèi)存處理大幅提高系統(tǒng)性能。此外,Scribe、Flume、Kafka、Storm、Drill、Impala、TEZ/Stinger、Presto 和 Spark/Shark 等的出現(xiàn)并不是取代 Hadoop,而是擴(kuò)大了大數(shù)據(jù)技術(shù)生態(tài)環(huán)境,促使生態(tài)環(huán)境向良性和完整發(fā)展。今后在非易失存儲(chǔ)層次、網(wǎng)絡(luò)通信層次、易失存儲(chǔ)層次和計(jì)算框架層次還會(huì)出現(xiàn)更多、更好和更專用化的軟件系統(tǒng)[11]。

隨著“數(shù)據(jù)意識(shí)”逐漸增強(qiáng),尤其是傳統(tǒng)企業(yè)將采納 Hadoop 這樣的技術(shù),將企業(yè)生產(chǎn)運(yùn)營(yíng)相關(guān)的數(shù)據(jù)資產(chǎn)保存起來(lái)。這一進(jìn)步將擴(kuò)大Hadoop 技術(shù)的應(yīng)用場(chǎng)景,產(chǎn)生相當(dāng)規(guī)模的企業(yè)大數(shù)據(jù)計(jì)算市場(chǎng)。企業(yè)大數(shù)據(jù)計(jì)算市場(chǎng)將基于開(kāi)源大數(shù)據(jù)技術(shù)生態(tài)環(huán)境,由商業(yè)化 IT 技術(shù)公司主導(dǎo),讓開(kāi)源大數(shù)據(jù)技術(shù)進(jìn)入企業(yè)計(jì)算市場(chǎng),將企業(yè)計(jì)算的特征融入進(jìn)來(lái),形成有依賴又相對(duì)獨(dú)立發(fā)展的商業(yè)大數(shù)據(jù)技術(shù)生態(tài)環(huán)境。數(shù)據(jù)成為資產(chǎn)以后,還將產(chǎn)生數(shù)據(jù)交易市場(chǎng)。盡管數(shù)據(jù)交易的形式和內(nèi)容還需要探討,但可以預(yù)見(jiàn)將產(chǎn)生以數(shù)據(jù)共享與交易為中心的大數(shù)據(jù)生態(tài)環(huán)境,將產(chǎn)生在政策法規(guī)允許范圍內(nèi)出現(xiàn)明碼實(shí)價(jià)的數(shù)據(jù)交易。

2.4.2 實(shí)時(shí)和精準(zhǔn)要素更為應(yīng)用重視

在全球互聯(lián)網(wǎng)企業(yè)的努力下,Hadoop 已經(jīng)可以處理百 PB 級(jí)的數(shù)據(jù),在不考慮時(shí)間維度的前提下,可以處理價(jià)值密度低的數(shù)據(jù)了。在解決了傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)技術(shù)無(wú)法處理如此量級(jí)的數(shù)據(jù)之后,業(yè)界正在向速度和準(zhǔn)確度兩個(gè)方向要價(jià)值。換句話說(shuō),如何從大數(shù)據(jù)中獲取更大回報(bào)成為業(yè)界新的挑戰(zhàn)?;ヂ?lián)網(wǎng)服務(wù)強(qiáng)調(diào)用戶體驗(yàn),原本做不到實(shí)時(shí)的應(yīng)用在向?qū)崟r(shí)化靠攏,比如前端系統(tǒng)及業(yè)務(wù)日志從產(chǎn)生到收集入庫(kù)的延遲從 1 到 2天時(shí)間進(jìn)化到 10 秒以內(nèi)。傳統(tǒng)企業(yè)無(wú)法忍受關(guān)系數(shù)據(jù)庫(kù)動(dòng)輒幾十分鐘的查詢分析性能,紛紛求助于性價(jià)比更好的技術(shù)和產(chǎn)品。這些需求使大數(shù)據(jù)交互式查詢分析、流式計(jì)算和內(nèi)存計(jì)算成為業(yè)界研發(fā)和應(yīng)用的新方向。

作為批式計(jì)算的補(bǔ)充,交互式分析計(jì)算的目標(biāo)是將 PB 級(jí)數(shù)據(jù)的處理時(shí)間縮短到秒級(jí)。Apache Drill 是開(kāi)源的 Dremel 實(shí)現(xiàn),雖已有應(yīng)用但尚不成熟。由 Cloudera 公司主導(dǎo)的Impala 也是參照 Dremel 實(shí)現(xiàn),同時(shí)也參考了MPP(Massively Parallel Processing)的設(shè)計(jì)思想,目前已經(jīng)接近實(shí)用階段。Hortonworks 公司主導(dǎo)的 TEZ/Stinger。TEZ 是運(yùn)行在 YARN(Hadoop 2.0 的資源管理框架)上的 DAG 計(jì)算框架,而 Stinger 是下一代的 Hive(SQL on Hadoop 的事實(shí)標(biāo)準(zhǔn)),不同的是 Hive 將 SQL 解析為MapReduce 命令執(zhí)行,而 Stinger 將 SQL 解析為能夠在 TEZ 上執(zhí)行的 DAG,從而解決計(jì)算實(shí)時(shí)性問(wèn)題。2013 年底,由 Facebook 開(kāi)源的 Presto分布式 SQL 查詢引擎可對(duì) 250 PB 以上的數(shù)據(jù)進(jìn)行交互式分析,比 Hive 的性能高出 10 倍。類似的 Shark 是 Spark 上的 SQL 執(zhí)行引擎,得益于 Shark 的列存儲(chǔ)和 Spark 的內(nèi)存處理等特性,Shark 號(hào)稱可以比 Hive 的性能提高 100 倍。

在實(shí)時(shí)計(jì)算、機(jī)器學(xué)習(xí)和深度學(xué)習(xí)等技術(shù)的支撐下,個(gè)性化推薦已經(jīng)開(kāi)始從簡(jiǎn)單的商品推薦走向復(fù)雜的內(nèi)容推薦。根據(jù)用戶的特性與偏好,推薦內(nèi)容的特征以及當(dāng)時(shí)的上下文數(shù)據(jù)(客戶端設(shè)備類型、用戶所處時(shí)空數(shù)據(jù)等),向特定用戶提供個(gè)性化的內(nèi)容推薦服務(wù),內(nèi)容包括商品(包括電商和零售)、廣告、新聞和資訊等。在移動(dòng)設(shè)備和移動(dòng)互聯(lián)網(wǎng)飛速發(fā)展的時(shí)代,個(gè)性化推薦將成為用戶獲取信息最直接的渠道之一。

2.4.3 面向系統(tǒng)能效潛力挖掘的差異化技術(shù)發(fā)展成為重點(diǎn)

2014 年的大數(shù)據(jù)技術(shù)走向?qū)⑹歉咝У南到y(tǒng)和更差異化的技術(shù)。系統(tǒng)能效將會(huì)是業(yè)界關(guān)注的重點(diǎn)。比如百度云存儲(chǔ)萬(wàn)臺(tái)定制 ARM 服務(wù)器就是典型案例,節(jié)電約 25%,存儲(chǔ)密度提升 70%,每瓦特計(jì)算能力提升 34 倍(用 GPU 取代 CPU 計(jì)算),近 10 個(gè)月以來(lái)每 GB 存儲(chǔ)成本降低 50%。差異化的技術(shù)指的是更加專用的技術(shù),一個(gè)系統(tǒng)可能只針對(duì)問(wèn)題的某一個(gè)方面,一個(gè)問(wèn)題的解決可能會(huì)依賴若干個(gè)系統(tǒng)和軟件。比如 Hadoop 將逐漸成為取代磁帶庫(kù)的成熟技術(shù),而直接對(duì)接應(yīng)用的可能會(huì)是并行數(shù)據(jù)庫(kù)和內(nèi)存數(shù)據(jù)庫(kù)。又如并行數(shù)據(jù)庫(kù)更鮮明的分化為面向事務(wù)處理的Transaction 類數(shù)據(jù)庫(kù)和面向分析的 Analysis 類數(shù)據(jù)庫(kù)等。

3 天璣大數(shù)據(jù)引擎

Hadoop 作為 Google 系統(tǒng)的開(kāi)源實(shí)現(xiàn)已經(jīng)在互聯(lián)網(wǎng)領(lǐng)域得以廣泛的應(yīng)用。國(guó)外企業(yè),如雅虎、Facebook、亞馬遜(Amazon)和 IBM等和國(guó)內(nèi)企業(yè),如百度、中國(guó)移動(dòng)、阿里巴巴、騰訊、網(wǎng)易和人人網(wǎng)等都在使用 Hadoop 軟件。Hadoop核心以及外圍工具和服務(wù)為快速構(gòu)建互聯(lián)網(wǎng)量級(jí)的數(shù)據(jù)處理提供了可直接使用的工具集。開(kāi)源軟件的眾包特點(diǎn)和草根特性在 Hadoop 軟件上得以充分體現(xiàn)。開(kāi)源軟件應(yīng)用最廣泛的是互聯(lián)網(wǎng)公司,尤其是那些開(kāi)始創(chuàng)業(yè)的小企業(yè)(start-ups),在技術(shù)選型方面 LAMP7指一組通常一起使用來(lái)運(yùn)行動(dòng)態(tài)網(wǎng)站或者服務(wù)器的自由軟件:Linux操作系統(tǒng)Apache(阿帕奇)網(wǎng)頁(yè)服務(wù)器、MySQL數(shù)據(jù)管理系統(tǒng)、PHP腳本語(yǔ)言、memcache8一個(gè)高性能的分布式的內(nèi)存對(duì)象緩存系統(tǒng)和 Hadoop是他們的軟件構(gòu)件首選。這里,成本是一方面的原因,另一方面,選用開(kāi)源軟件可以很容易地根據(jù)自身業(yè)務(wù)特點(diǎn)進(jìn)行定制開(kāi)發(fā),形成企業(yè)的核心競(jìng)爭(zhēng)力。

互聯(lián)網(wǎng)企業(yè)在使用 Hadoop 的同時(shí)也根據(jù)自身業(yè)務(wù)需求,開(kāi)發(fā)出相關(guān)的軟件和工具,不斷增強(qiáng) Hadoop 軟件功能和壯大 Hadoop 的開(kāi)發(fā)隊(duì)伍。比如 Facebook 公司因?yàn)槠鋽?shù)據(jù)分析工程師只熟悉 SQL 語(yǔ)言而不熟悉 MapReduce 編程框架,由此催生 Hive 這樣的項(xiàng)目。其初衷就是實(shí)現(xiàn) SQL到 MapReduce 的解釋執(zhí)行。Hive 現(xiàn)在已經(jīng)演化為數(shù)據(jù)倉(cāng)庫(kù)的實(shí)用解決方案。這從一個(gè)側(cè)面反映了軟件開(kāi)放源代碼對(duì)信息技術(shù)的巨大推動(dòng)作用。國(guó)內(nèi)的大數(shù)據(jù)計(jì)算技術(shù)和產(chǎn)業(yè)發(fā)展應(yīng)該從開(kāi)源文化中汲取經(jīng)驗(yàn),重視開(kāi)源軟件,以開(kāi)源軟件為基礎(chǔ)形成核心競(jìng)爭(zhēng)力。天璣大數(shù)據(jù)引擎的研發(fā)就是遵循了這一原則,發(fā)揮中國(guó)科學(xué)院計(jì)算技術(shù)研究所科研能力強(qiáng)的優(yōu)勢(shì),面向大數(shù)據(jù)計(jì)算的技術(shù)需求,解決關(guān)鍵問(wèn)題,形成關(guān)鍵技術(shù)。利用開(kāi)源Hadoop 作為平臺(tái),集成整合并回饋開(kāi)源社區(qū),從而達(dá)到天璣大數(shù)據(jù)引擎軟件生態(tài)環(huán)境的良性循環(huán)和良性發(fā)展。

如圖 5 所示,天璣大數(shù)據(jù)引擎的特點(diǎn)是:針對(duì)企業(yè)計(jì)算領(lǐng)域的大數(shù)據(jù)生產(chǎn)需求,兼容傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)操作接口,支持流式計(jì)算、圖計(jì)算等模式。支持 EB 級(jí)數(shù)據(jù)分布式存儲(chǔ)及離線式非線性處理能力,PB 級(jí)數(shù)據(jù)在線式處理能力,達(dá)到每秒千萬(wàn)記錄級(jí)流式處理能力。達(dá)到這樣的目標(biāo)需要攻克統(tǒng)一存儲(chǔ)、查詢引擎、隔離機(jī)制、自動(dòng)化運(yùn)維和軟硬件一體等技術(shù)難點(diǎn)和難題,最終逐步建立起包含模型、算法、接口和開(kāi)發(fā)庫(kù)等在內(nèi)的天璣大數(shù)據(jù)引擎軟件棧和生態(tài)環(huán)境。

4 大數(shù)據(jù)關(guān)鍵技術(shù)研發(fā)

圖 5 天璣大數(shù)據(jù)引擎軟件棧構(gòu)成Fig. 5. Golaxy big data engine software stack

國(guó)內(nèi)的高校和科研院所基于 Hadoop 在數(shù)據(jù)存儲(chǔ)、資源管理、作業(yè)調(diào)度、性能分析優(yōu)化、系統(tǒng)高可用性和安全性等方面開(kāi)展了研究工作,相關(guān)研究成果多以開(kāi)源形式貢獻(xiàn)給 Hadoop 社區(qū)。近兩年,我們主要在數(shù)據(jù)的存儲(chǔ)和索引等技術(shù)上開(kāi)展研究工作,形成了天璣大數(shù)據(jù)引擎的核心競(jìng)爭(zhēng)力。

4.1 行列混合式數(shù)據(jù)存儲(chǔ)技術(shù)

Apache Hive 是基于 Hadoop 的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具,可將 SQL 語(yǔ)句轉(zhuǎn)換成 MapReduce命令執(zhí)行。在 Hive 中,二進(jìn)制關(guān)系數(shù)據(jù)采用SequenceFile文件格式按行序存儲(chǔ),即只能按照行存和行取的方式來(lái)訪問(wèn)數(shù)據(jù)。當(dāng)要讀取某一列時(shí)需要先取出所有數(shù)據(jù),然后再?gòu)闹刑崛〕鲈摿械臄?shù)據(jù),效率很低。

我們觀察到行存儲(chǔ)技術(shù)的優(yōu)勢(shì)在于寫(xiě)入性能高,數(shù)據(jù)一致性好;列存儲(chǔ)技術(shù)的優(yōu)勢(shì)在于壓縮率高,數(shù)據(jù)加載性能好。RCFile 的研究動(dòng)機(jī)在于,將行存儲(chǔ)和列存儲(chǔ)的優(yōu)點(diǎn)集于一身,保持高壓縮率和加載性能,同時(shí)提高數(shù)據(jù)寫(xiě)入性能和一致性,后者恰好是列存儲(chǔ)的短板。RCFile 結(jié)構(gòu)的設(shè)計(jì)原則是“宏觀行存儲(chǔ)結(jié)構(gòu),微觀列存儲(chǔ)結(jié)構(gòu)”,即先對(duì)關(guān)系表水平劃分為“行組”,“行組”間遵循行序存儲(chǔ);然后在“行組”內(nèi)采用列序存儲(chǔ)方式。這樣一來(lái),結(jié)合 HDFS 文件系統(tǒng)的塊式存儲(chǔ)機(jī)制,可以保證同一行的數(shù)據(jù)存儲(chǔ)在同一個(gè)節(jié)點(diǎn),繼承了行存儲(chǔ)的優(yōu)勢(shì);同時(shí)“行組”內(nèi)采用了逐列壓縮技術(shù),可實(shí)現(xiàn)列維度的高壓縮比,節(jié)省存儲(chǔ)空間,并可實(shí)現(xiàn)只對(duì)查詢所需要的列進(jìn)行解壓處理。

RCFile 的實(shí)現(xiàn)代碼現(xiàn)已貢獻(xiàn)給 Hive 開(kāi)源項(xiàng)目,并已經(jīng)應(yīng)用于 Facebook 公司的 Hadoop 生產(chǎn)系統(tǒng)。經(jīng) Facebook 公司實(shí)測(cè)可節(jié)約 25% 存儲(chǔ)空間 。與 Apache Hive 數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)之前缺省使用的行存儲(chǔ)技術(shù)(SequenceFile)相比,RCFile 在不影響查詢性能的前提下節(jié)省高達(dá) 20% 的磁盤(pán)空間;與雅虎公司開(kāi)發(fā)的數(shù)據(jù)分析系統(tǒng)(Apache Pig)中的列組存儲(chǔ)技術(shù)相比,RCFile 在磁盤(pán)利用率相當(dāng)?shù)那闆r下可以將數(shù)據(jù)加載性能提高23% 左右。自 0.4.0 版開(kāi)始,RCFile 已經(jīng)集成到Apache Hive,用以替換 SequenceFile 成為缺省的二進(jìn)制數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)。據(jù)了解,從 2009 年起,國(guó)際和國(guó)內(nèi)使用 Apache Hive 的很多互聯(lián)網(wǎng)公司逐步轉(zhuǎn)向使用 RCFile 存儲(chǔ)數(shù)據(jù)。RCFile 已經(jīng)成為諸如 Apache Hive 的分布式離線數(shù)據(jù)分析系統(tǒng)中數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)的事實(shí)標(biāo)準(zhǔn)。在 RCFile 的基礎(chǔ)上,俄亥俄州立大學(xué)的張曉東教授的研究團(tuán)隊(duì)提出了 ORCFile,通過(guò)優(yōu)化行分組的大小并加入索引功能等,進(jìn)一步提高了系統(tǒng)性能。

4.2 列存儲(chǔ)數(shù)據(jù)庫(kù)索引技術(shù)

Apache HBase 是 Hadoop 中 BigTable 的一個(gè)開(kāi)源實(shí)現(xiàn),是一種適用于海量數(shù)據(jù)(TB 到 PB 級(jí))下單個(gè)維度(僅限主鍵)區(qū)間查詢的數(shù)據(jù)庫(kù)系統(tǒng)。其特點(diǎn)是邏輯上數(shù)據(jù)按主鍵順序排列,而物理上數(shù)據(jù)按主鍵分片存儲(chǔ)到多個(gè)數(shù)據(jù)節(jié)點(diǎn)。HBase 可以按主鍵迅速定位數(shù)據(jù),同時(shí)還支持主鍵上高吞吐量的范圍查詢。但是在實(shí)際應(yīng)用中往往要將數(shù)據(jù)按多個(gè)不同的屬性進(jìn)行排序以支持多個(gè)維度的區(qū)間查詢。目前 HBase 中還沒(méi)能提供一種查詢速度快、存儲(chǔ)開(kāi)銷低的索引方法來(lái)實(shí)現(xiàn)以上功能。

為了滿足海量數(shù)據(jù)上的多維區(qū)間查詢需求,我們基于 HBase 實(shí)現(xiàn)了互補(bǔ)聚簇索引方法(CCIndex)和片內(nèi)索引方法(IRIndex)查詢系統(tǒng)。這兩種索引機(jī)制適合的應(yīng)用場(chǎng)景完全不同。其中,CCIndex 是全局索引,適合數(shù)據(jù)讀寫(xiě)分離模式的在線多維區(qū)間查詢,查詢延遲小,但數(shù)據(jù)一致性維護(hù)代價(jià)和索引膨脹率高;IRIndex 則是局部索引,是一種通用型多維區(qū)間查詢索引機(jī)制,能夠保證索引和數(shù)據(jù)原表的一致性,索引膨脹率非常低,理論上只到 9%。CCIndex 為每個(gè)索引列構(gòu)建獨(dú)立的全局索引表,并在索引表中存儲(chǔ)直接數(shù)據(jù)而非偏移數(shù)據(jù)。這樣在進(jìn)行多維區(qū)間查詢時(shí),就可以直接從對(duì)應(yīng)的索引表中取得完整記錄,實(shí)現(xiàn)了一級(jí)索引,利用索引表上高效的連續(xù)掃描代替原表上的隨機(jī)讀取,從而大幅提高多維區(qū)間查詢性能。

IRIndex 將索引構(gòu)建在 Region 內(nèi)部,通過(guò)與原表 HFile 文件分離的獨(dú)立 IndexFile 文件實(shí)現(xiàn),數(shù)據(jù)寫(xiě)入和更新時(shí)先寫(xiě)入 IndexFile 再寫(xiě)入HFile,保證了索引和原表數(shù)據(jù)的強(qiáng)一致性,實(shí)測(cè)寫(xiě)入和更新吞吐率均高于 CCIndex 和其他全局或局部索引實(shí)現(xiàn)技術(shù)。

結(jié)合淘寶公司“數(shù)據(jù)魔方”實(shí)時(shí)數(shù)據(jù)分析系統(tǒng)的實(shí)際需求,作為其全屬性實(shí)時(shí)計(jì)算系統(tǒng)的核心,CCIndex 技術(shù)經(jīng)適配和優(yōu)化后,已集成到生產(chǎn)系統(tǒng)中投入實(shí)際運(yùn)行。CCIndex 增強(qiáng)了全屬性實(shí)時(shí)計(jì)算系統(tǒng)的擴(kuò)展性和性能。目前,系統(tǒng)處理的數(shù)據(jù)條目超過(guò) 100 億。采用 CCIndex 技術(shù)后,在硬件規(guī)模保持不變的前提下,系統(tǒng)處理的數(shù)據(jù)時(shí)效范圍從原來(lái)的 7 天增大到 3 個(gè)月,處理容量增大了一個(gè)數(shù)量級(jí),系統(tǒng)吞吐率增大了 7 倍,對(duì)原來(lái)延遲大于 1 s 的查詢請(qǐng)求響應(yīng)時(shí)間平均降低了 57.4%。IRIndex 技術(shù)也在積極與工業(yè)界合作,以期在大規(guī)模數(shù)據(jù)分析領(lǐng)域獲得第一手實(shí)際應(yīng)用的驗(yàn)證數(shù)據(jù)。

4.3 基于硬件加速的流式透明壓縮技術(shù)

通過(guò)對(duì)分布式文件系統(tǒng)之上應(yīng)用的類型進(jìn)行分析可以知道,這些應(yīng)用使用或產(chǎn)生的大部分?jǐn)?shù)據(jù)是文本信息,特別是離線或在線分析系統(tǒng)中的數(shù)據(jù)基本都是文本。而文本本身是一種高度可壓縮的數(shù)據(jù),因此通過(guò)引入一種快速的數(shù)據(jù)壓縮方法,可以有效降低數(shù)據(jù)的存儲(chǔ)開(kāi)銷,提高磁盤(pán)和網(wǎng)絡(luò)讀寫(xiě)的有效帶寬,從而提高應(yīng)用的吞吐量[9]。

傳統(tǒng)的壓縮方法,如 GZip,在壓縮或解壓縮過(guò)程中會(huì)占用大量的 CPU 資源,使系統(tǒng)的處理能力受到較大的影響。雖然壓縮能使系統(tǒng)的存儲(chǔ)開(kāi)銷減小,但也有可能會(huì)使系統(tǒng)的處理能力下降。隨著硬件技術(shù)的發(fā)展,可以使用硬件設(shè)備來(lái)壓縮數(shù)據(jù),達(dá)到分流 CPU 負(fù)載和提高壓縮處理效率的目的。我們的解決方法提供一種分布式文件系統(tǒng)上的基于硬件加速卡的流式透明壓縮技術(shù),在占用少量系統(tǒng)資源的情況下,完成對(duì)用戶透明的壓縮和解壓縮過(guò)程,能夠有效降低系統(tǒng)的存儲(chǔ)開(kāi)銷和提高系統(tǒng)的處理能力。

首先,我們采用硬件加速卡來(lái)對(duì)內(nèi)存緩沖區(qū)進(jìn)行壓縮或解壓縮。其次,數(shù)據(jù)的壓縮或解壓縮對(duì)于用戶是完全透明的,無(wú)論是寫(xiě)入或讀取數(shù)據(jù),都可以提高磁盤(pán)和網(wǎng)絡(luò)讀寫(xiě)的有效帶寬。此外,采用分片式壓縮格式,將文件分成大小為 64~128 KB 的分片(chunk)。每一個(gè)分片,在實(shí)際的壓縮數(shù)據(jù)前部是該分片的頭部信息,包括:原始數(shù)據(jù)大小和壓縮數(shù)據(jù)大小。最后,對(duì)上層系統(tǒng)提供一個(gè)基于硬件加速卡的流式壓縮器,用以封裝原有的輸入流或輸出流,創(chuàng)建壓縮或解壓后的輸入流或輸出流。如果硬件加速卡出現(xiàn)故障,采用軟件壓縮/解壓縮,形成良好的容錯(cuò)機(jī)制。

我們的原型采用了基于 Apache HDFS 實(shí)現(xiàn)基于硬件加速卡的流式透明壓縮。基于硬件加速卡的流式透明壓縮原型代碼基礎(chǔ)采用了hadoop-0.20.2,用 Java 語(yǔ)言實(shí)現(xiàn)?;谟布铀倏ǖ牧魇酵该鲏嚎s器位于客戶端和數(shù)據(jù)節(jié)點(diǎn)之間??蛻魧?xiě)入數(shù)據(jù)時(shí),數(shù)據(jù)先經(jīng)過(guò)壓縮再發(fā)送到數(shù)據(jù)節(jié)點(diǎn);客戶讀取數(shù)據(jù)時(shí),先將從數(shù)據(jù)節(jié)點(diǎn)讀取的數(shù)據(jù)進(jìn)行解壓縮后再返回給客戶端。

借助硬件加速卡,壓縮過(guò)程只占用少量 CPU資源,能夠卸載高達(dá) 20%~30% 的 CPU 負(fù)載,壓縮處理吞吐率高于磁盤(pán)讀寫(xiě)帶寬。從目前測(cè)試效果看來(lái),數(shù)據(jù)壓縮比大約為 25%,有效降低了存儲(chǔ)開(kāi)銷,同時(shí)將磁盤(pán)的有效帶寬提高了 4~5倍。壓縮過(guò)程對(duì)上層應(yīng)用透明,因此基于 HDFS的在線或離線數(shù)據(jù)分析系統(tǒng)(HBase 和 Hive 等)都可以方便地使用。該項(xiàng)技術(shù)已經(jīng)隨天璣大數(shù)據(jù)一體機(jī)廣泛應(yīng)用到政府、國(guó)防、安全和公安等部門,大大提高了海量數(shù)據(jù)處理的計(jì)算效率,同時(shí)節(jié)省了存儲(chǔ)空間。

5 天璣大數(shù)據(jù)引擎典型應(yīng)用

5.1 讀寫(xiě)分離統(tǒng)計(jì)分析型應(yīng)用

結(jié)合淘寶的數(shù)據(jù)魔方在線系統(tǒng)的實(shí)際需求,作為數(shù)據(jù)魔方全屬性實(shí)時(shí)計(jì)算系統(tǒng)的核心,天璣大數(shù)據(jù)引擎的重要組件—ICTBase 已上線投入實(shí)際運(yùn)行,使淘寶網(wǎng)原有的業(yè)務(wù)邏輯能夠直接遷移到經(jīng)改進(jìn)的 HBase 上,同時(shí)增強(qiáng)了全屬性實(shí)時(shí)計(jì)算系統(tǒng)的擴(kuò)展性和性能。目前,該實(shí)時(shí)計(jì)算系統(tǒng)處理的數(shù)據(jù)記錄超過(guò) 108 億。ICTBase 的索引及分布式查詢技術(shù)解決了諸如 HBase 等當(dāng)前主流的列簇式 NoSQL 數(shù)據(jù)庫(kù)系統(tǒng)在多列查詢上的功能缺失和性能低下的問(wèn)題,通過(guò)融合各種索引技術(shù)及聯(lián)合優(yōu)化,可以對(duì) NoSQL 中數(shù)據(jù)非主鍵列進(jìn)行定位和查詢,從而彌補(bǔ)了 NoSQL 與傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)相比查詢功能及能力的欠缺。同時(shí)利用服務(wù)端計(jì)算技術(shù),可以對(duì)海量數(shù)據(jù)進(jìn)行本地化聚合計(jì)算而無(wú)需進(jìn)行大量數(shù)據(jù)拷貝傳輸。如此經(jīng)過(guò)強(qiáng)化的查詢統(tǒng)計(jì)能力配合 NoSQL 的高擴(kuò)展性及大吞吐量的數(shù)據(jù)處理能力,使眾多關(guān)系型數(shù)據(jù)庫(kù)面對(duì)的數(shù)據(jù)處理瓶頸得以克服。

5.2 低延遲流式處理型應(yīng)用

一直以來(lái),對(duì)于用戶流量來(lái)源以及用戶點(diǎn)擊行為的分析都是淘寶的“量子統(tǒng)計(jì)”提供的服務(wù)中最為重要的組成部分。以往采用傳統(tǒng)技術(shù)只能為用戶提供按小時(shí)統(tǒng)計(jì)的分析數(shù)據(jù),即用戶可查詢店鋪內(nèi)某一天 24 小時(shí)分時(shí)段的數(shù)據(jù)報(bào)表。其內(nèi)容包括各時(shí)段用戶瀏覽量、訪客數(shù)及來(lái)源和店內(nèi)瀏覽路徑。而采用 ICTBase 進(jìn)行數(shù)據(jù)流式存儲(chǔ)和統(tǒng)計(jì)之后,店主可以實(shí)時(shí)地看到當(dāng)前正在瀏覽客戶的實(shí)時(shí)點(diǎn)擊行為。新系統(tǒng)實(shí)時(shí)地收集分析了淘寶全網(wǎng)用戶點(diǎn)擊日志,統(tǒng)計(jì)內(nèi)容包括淘寶 300萬(wàn)店鋪的實(shí)時(shí) UV 和 PV 值,并能繪制出淘寶網(wǎng)日均 1.2 億用戶的實(shí)時(shí)點(diǎn)擊行為圖示,最后將這些信息分類推送給相關(guān)店主。整個(gè)系統(tǒng)的數(shù)據(jù)處理延時(shí)僅為 2 至 3 秒。實(shí)際日志處理量為 3 萬(wàn)至5 萬(wàn)記錄每秒,每天 20 億記錄,數(shù)據(jù)寫(xiě)入操作為15 至 25 萬(wàn)次每秒,單日原始數(shù)據(jù)量為 600 GB,存儲(chǔ)一周用戶數(shù)據(jù)則原始數(shù)據(jù)量為 4 TB 左右。

5.3 高并發(fā)訪問(wèn)型應(yīng)用

騰訊網(wǎng)是目前中國(guó)最大的互聯(lián)網(wǎng)綜合服務(wù)提供商,也是中國(guó)服務(wù)用戶最多的互聯(lián)網(wǎng)企業(yè)之一。截至 2013 年 8 月 14 日,QQ 即時(shí)通信的活躍帳戶數(shù)達(dá)到 8.185 億,最高同時(shí)在線帳戶數(shù)達(dá)到 1.732 億。其數(shù)據(jù)平臺(tái)一直致力于發(fā)掘用戶數(shù)據(jù)的價(jià)值,為用戶提供更為精準(zhǔn)的個(gè)性化服務(wù)。廣點(diǎn)通即數(shù)據(jù)平臺(tái)核心產(chǎn)品之一,旨在根據(jù)用戶訪問(wèn)數(shù)據(jù)提高平臺(tái)廣告推送效率。

面向海量用戶訪問(wèn)數(shù)據(jù)的實(shí)時(shí)存儲(chǔ)查詢系統(tǒng)是廣點(diǎn)通智能推薦系統(tǒng)的基礎(chǔ)。全內(nèi)存分布式的ICTBase 優(yōu)化了線上系統(tǒng)查詢性能,提高了存儲(chǔ)層數(shù)據(jù)訪問(wèn)效率,大幅減輕集群內(nèi)部網(wǎng)絡(luò)壓力,提高了廣點(diǎn)通整體性能,并成功支持了對(duì)存儲(chǔ)性能要求更高的復(fù)雜用戶推薦算法。新系統(tǒng)經(jīng)過(guò)相應(yīng)優(yōu)化之后,實(shí)測(cè)單機(jī)查詢性能提升 20 倍,占用服務(wù)器數(shù)量縮減為原系統(tǒng)的 1/5,日均處理日志數(shù)量 30 億記錄,處理用戶請(qǐng)求數(shù)量達(dá)25 億次。

6 結(jié) 語(yǔ)

Hadoop 是大數(shù)據(jù)計(jì)算領(lǐng)域的一項(xiàng)具體技術(shù),一套軟件系統(tǒng)和工具。因其開(kāi)源而對(duì)推動(dòng)大數(shù)據(jù)計(jì)算技術(shù)發(fā)展起到了重要作用。面向不同的應(yīng)用需求,基于 Hadoop 的數(shù)據(jù)處理工具也應(yīng)運(yùn)而生。天璣大數(shù)據(jù)引擎集成了 Hadoop 生態(tài)環(huán)境中成熟且社區(qū)活躍的組件,如 Hive 和 HBase等,并整合了天璣團(tuán)隊(duì)的眾多研究成果,如RCFile、CCIndex/IRIndex、SwiftFS 等,可以滿足輿情分析、社會(huì)計(jì)算、商業(yè)智能和數(shù)據(jù)挖掘等大數(shù)據(jù)處理的實(shí)際需求??梢灶A(yù)見(jiàn),大數(shù)據(jù)計(jì)算的出現(xiàn)將催生更多、更好、更面向大眾的新應(yīng)用,同時(shí)更能夠加快大數(shù)據(jù)計(jì)算技術(shù)發(fā)展的步伐。

[1] Dean J, Ghemawat S. MapReduce: simpli fi ed data processing on large clusters [J]. Communications of the ACM, 2008, 51(1): 107-113.

[2] Ghemawat S, Gobioff H, Leung ST. The Google file system [C] // Proceedings of the 19th ACM Symposium on Operating Systems Principles, ACM, 2003: 29-43.

[3] Chang F, Dean J, Ghemawat S, et al. Bigtable: a distributed storage system for structured data [C] // Proceedings of the 7th USENIX Symposium on Operating Systems Design and Implementation, 2006, 7: 205-218.

[4] The Apache Software Foundation. Apache Hadoop [EB/OL]. http://hadoop.apache.org/.

[5] The Apache Software Foundation. Apache Hive [EB/OL]. http://hive.apache.org/.

[6] The Apache Software Foundation. Apache HBase. [EB/OL] http://hbase.apache.org/.

[7] He YQ, Lee RB, Huai Y, et al. RCFile: a fast and space-efficient data placement structure in MapReduce based warehouse systems [C] // Proceedings of International Conference on Data Engineering, 2011: 1199-1208.

[8] Zou YQ, Liu J, Wang SC, et al. CCIndex a complemental clustering index on distributed ordered tables for multi-dimensional range queries [C] // Proceedings of the 2010 IFIP International Conference on Network and Parallel Computing, 2010: 247-261.

[9] Nicolae B, Moise D, Antoniu G, et al. BlobSeer: bringing high throughput under heavy concurrency to Hadoop Map-Reduce applications [C] // 2010 IEEE International Symposium on Parallel and Distributed Processing, 2010: 1-11.

[10] Huai Y, Ma SY, Lee RB, et al. Understanding insights into the basic structure and essential issues of table placement methods in clusters [C] // Proceedings of 39th International Conference on Very Large Data Bases, 2013.

[11] 程學(xué)旗. 關(guān)于中國(guó)大數(shù)據(jù)生態(tài)系統(tǒng)的基礎(chǔ)問(wèn)題思考 [EB/OL]. http://www.china-cloud.com/yunjishu/ shujuzhongxin/20140213_23094.html.

Golaxy Big Data Engine and Its Applications

ZHA Li CHENG Xueqi

( Key Laboratory of Network Data Science and Technology, Institute of Computing Technology, Chinese Academy of Sciences, Beijing 100190, China )

Volume, variety and velocity are the three challenges that the big data computing must be faced with, which cannot be dealt with by traditional IT technologies. Bene fi ting from numerous domestic and overseas Internet companies’practical applications and continuous code contributions, the Apache Hadoop has become a mature software stack and the de facto standard of the PetaByte scale data processing. Furthermore, around different types of data processing requirements, different software ecosystems have been established. In the big data system fi eld, three research works of data placement, index construction and compression and decompression hardware acceleration, i.e. RCFile, CCIndex and SwiftFS respectively, effectively solving the storage space and query performance issues, were introduced in this paper. The above research achievements have been already integrated into the Golaxy big data engine software stack in the form of key technologies, and directly supported multiple practical applications of Taobao Inc. and Tencent Inc.

big data engine; data storage; row columnar; clustered index

TP 316.4 TP 319

A

2014-4-18

國(guó)家高技術(shù)研究發(fā)展計(jì)劃(863 計(jì)劃)(2013AA01A213)。

查禮(通訊作者),副研究員,博士,研究方向?yàn)榉植际接?jì)算系統(tǒng),E-mail:char@ict.ac.cn;程學(xué)旗,副總工程師、研究員,博士生導(dǎo)師,研究方向?yàn)榫W(wǎng)絡(luò)科學(xué)與社會(huì)計(jì)算、互聯(lián)網(wǎng)搜索與挖掘、網(wǎng)絡(luò)信息安全、分布式系統(tǒng)與大型仿真平臺(tái)等。

猜你喜歡
天璣開(kāi)源分布式
天璣&迅鯤新品參戰(zhàn) 淺析聯(lián)發(fā)科最新發(fā)布的移動(dòng)平臺(tái)
旗艦級(jí)特性全面下放 淺析聯(lián)發(fā)科天璣900移動(dòng)平臺(tái)
聯(lián)發(fā)科再推5G芯片
五毛錢能買多少頭牛
分布式光伏熱錢洶涌
分布式光伏:爆發(fā)還是徘徊
大家說(shuō):開(kāi)源、人工智能及創(chuàng)新
開(kāi)源中國(guó)開(kāi)源世界高峰論壇圓桌會(huì)議縱論開(kāi)源與互聯(lián)網(wǎng)+創(chuàng)新2.0
基于DDS的分布式三維協(xié)同仿真研究
開(kāi)源計(jì)算機(jī)輔助翻譯工具研究