海量數(shù)據(jù)(“Big Data”)是指那些足夠大的數(shù)據(jù),以至于無法再使用傳統(tǒng)的方法進(jìn)行處理。在過去,一直是Web搜索引擎的創(chuàng)建者們首當(dāng)其沖的面對(duì)這個(gè)問題。而今天,各種社交網(wǎng)絡(luò),移動(dòng)應(yīng)用以及各種傳感器和科學(xué)領(lǐng)域每天創(chuàng)建著上PB的數(shù)據(jù)。 為了應(yīng)對(duì)這種大規(guī)模數(shù)據(jù)處理的挑戰(zhàn),google創(chuàng)造了MapReduce。Google的工作以及yahoo創(chuàng)建的Hadoop孵化出一個(gè)完整的海量數(shù)據(jù)處理工具的生態(tài)系統(tǒng)。
隨著MapReduce的流行,一個(gè)由數(shù)據(jù)存儲(chǔ)層,MapReduce和查詢(簡稱SMAQ)組成的海量數(shù)據(jù)處理的棧式模型也逐漸展現(xiàn)出來。SMAQ系統(tǒng)通常是開源的,分布式的,運(yùn)行在普通硬件上。
就像由Linux, Apache, MySQL and PHP 組成的LAMP改變了互聯(lián)網(wǎng)應(yīng)用開發(fā)領(lǐng)域一樣,SMAQ將會(huì)把海量數(shù)據(jù)處理帶入一個(gè)更廣闊的天地。正如LAMP成為Web2.0的關(guān)鍵推動(dòng)者一樣,SMAQ系統(tǒng)將支撐起一個(gè)創(chuàng)新的以數(shù)據(jù)為驅(qū)動(dòng)的產(chǎn)品和服務(wù)的新時(shí)代。
盡管基于Hadoop的架構(gòu)占據(jù)了主導(dǎo)地位,但是SMAQ模型也包含大量的其他系統(tǒng),包括主流的NoSQL數(shù)據(jù)庫。這篇文章描述了SMAQ棧式模型以及今天那些可以包括在這個(gè)模型下的海量數(shù)據(jù)處理工具。
MapReduce
MapReduce是google為創(chuàng)建web網(wǎng)頁索引而創(chuàng)建的。MapReduce框架已成為今天大多數(shù)海量數(shù)據(jù)處理的廠房。MapReduce的關(guān)鍵在于,將在數(shù)據(jù)集合上的一個(gè)查詢進(jìn)行劃分,然后在多個(gè)節(jié)點(diǎn)上并行執(zhí)行。這種分布式模式解決了數(shù)據(jù)太大以至于無法存放在單獨(dú)一臺(tái)機(jī)器上的難題。
說到MapReduce,通常要舉的一個(gè)例子就是查找一篇文檔中不同單詞的出現(xiàn)個(gè)數(shù)。在map階段單詞被抽出來,然后給個(gè)count值1,在reduce節(jié)點(diǎn),將相同的單詞的count值累加起來。
看起來是不是將一個(gè)很簡單的工作搞地很復(fù)雜了,這就是MapReduce。為了讓MapReduce完成這項(xiàng)任務(wù),map和reduce階段必須遵守一定的限制來使得工作可以并行化。將查詢請(qǐng)求轉(zhuǎn)換為一個(gè)或者多個(gè)MapReduce并不是一個(gè)直觀的過程,為了解決這個(gè)問題,一些更高級(jí)的抽象被提出來,我們將在下面關(guān)于查詢的那節(jié)里進(jìn)行討論。
使用MapReduce解決問題,通常需要三個(gè)操作:
數(shù)據(jù)加載—用數(shù)據(jù)倉庫的叫法,這個(gè)過程叫做抽取(extract),轉(zhuǎn)換(transform),加載(load){簡稱ETL}更合適些。為了利用MapReduce進(jìn)行處理,數(shù)據(jù)必須從源數(shù)據(jù)里抽取出來,進(jìn)行必要的結(jié)構(gòu)化,加載到MapReduce可以訪問的存儲(chǔ)層。
MapReduce—從存儲(chǔ)層訪問數(shù)據(jù),進(jìn)行處理,再將結(jié)果返回給存儲(chǔ)層
結(jié)果抽取—一旦處理完畢,為了讓結(jié)果對(duì)于人來說是可用的,還需要能夠?qū)⒋鎯?chǔ)層的結(jié)果數(shù)據(jù)進(jìn)行查詢和展示。
很多SMAQ系統(tǒng)都具有自身的一些屬性,主要就是圍繞上述三個(gè)過程的簡化。
Hadoop MapReduce
Hadoop是主要的開源MapReduce實(shí)現(xiàn)。由yahoo資助,2006年由Doug Cutting創(chuàng)建,2008年達(dá)到了web規(guī)模的數(shù)據(jù)處理容量。
Hadoop項(xiàng)目現(xiàn)在由Apache管理。隨著不斷的努力,和多個(gè)子項(xiàng)目一起共同構(gòu)成了完整的SMAQ模型。
由于是用java實(shí)現(xiàn)的,所以Hadoop的MapReduce實(shí)現(xiàn)可以通過java語言交互。創(chuàng)建MapReduce job通常需要寫一些函數(shù)用來實(shí)現(xiàn)map和reduce階段需要做的計(jì)算。處理數(shù)據(jù)必須能夠加載到Hadoop的分布式文件系統(tǒng)中。
以wordcount為例,map函數(shù)如下(來源于Hadoop MapReduce文檔,展示了其中關(guān)鍵的步驟)
public static class Map
extends Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable> 對(duì)應(yīng)的reduce函數(shù)如下:
public static class Reduce
extends Reducer<Text, IntWritable, Text, IntWritable> {
public void reduce(Text key, Iterable<IntWritable> values,
Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
context.write(key, new IntWritable(sum));
}
}
使用Hadoop運(yùn)行一個(gè)MapReduce job包括如下幾個(gè)步驟:
1. 用一個(gè)java程序定義MapReduce的各個(gè)階段
2. 將數(shù)據(jù)加載進(jìn)文件系統(tǒng)
3. 提交job進(jìn)行執(zhí)行
4. 從文件系統(tǒng)獲取執(zhí)行結(jié)果
直接通過java API,Hadoop MapReduce job寫起來可能很復(fù)雜,需要程序員很多方面的參與。為了讓數(shù)據(jù)加載和處理工作更加簡單直接,圍繞著Hadoop一個(gè)很大的生態(tài)系統(tǒng)已經(jīng)形成。
其他實(shí)現(xiàn)
MapReduce已經(jīng)在很多其他的程序語言和系統(tǒng)中實(shí)現(xiàn),詳細(xì)的列表可以參考Wikipedia's entry for MapReduce.。尤其是幾個(gè)NoSQL數(shù)據(jù)庫已經(jīng)集成了MapReduce,后面我們會(huì)對(duì)此進(jìn)行描述。
Storage
從數(shù)據(jù)獲取到結(jié)果存放,MapReduce都需要與存儲(chǔ)打交道。與傳統(tǒng)數(shù)據(jù)庫不同,MapReduce的輸入數(shù)據(jù)并不是關(guān)系型的。輸入數(shù)據(jù)存放在不同的chunk上,能夠劃分給不同的節(jié)點(diǎn),然后提供以key-value的形式提供給map階段。數(shù)據(jù)不需要一個(gè)schema,而且可能是無結(jié)構(gòu)的。但是數(shù)據(jù)必須是可分布的,能夠提供給不同的處理節(jié)點(diǎn)。
存儲(chǔ)層的設(shè)計(jì)和特點(diǎn)很重要不僅僅是因?yàn)樗cMapReduce的接口,而且因?yàn)樗鼈冎苯記Q定了數(shù)據(jù)加載和結(jié)果查詢和展示的方便性。
Hadoop分布式文件系統(tǒng)
Hadoop使用的標(biāo)準(zhǔn)存儲(chǔ)機(jī)制是HDFS。作為Hadoop的核心部分,HDFS有如下特點(diǎn),詳細(xì)參見HDFS design document.:
容錯(cuò) -- 假設(shè)失敗是常態(tài)允許HDFS運(yùn)行在普通硬件上
流數(shù)據(jù)訪問 – HDFS實(shí)現(xiàn)時(shí)考慮的是批量處理,因此著重于高吞吐率而不是數(shù)據(jù)的隨機(jī)訪問
高度可擴(kuò)展性 – HDFS可以擴(kuò)展到PB級(jí)的數(shù)據(jù),比如Facebook就有一個(gè)這樣的產(chǎn)品級(jí)使用
可移植性 – Hadoop是可以跨操作系統(tǒng)移植的
單次寫 – 假設(shè)文件寫后不會(huì)改變,HDFS簡化了replication提高了數(shù)據(jù)吞吐率
計(jì)算本地化 – 考慮到數(shù)據(jù)量,通常將程序移到數(shù)據(jù)附近執(zhí)行會(huì)更快,HDFS提供了這方面的支持
HDFS提供了一個(gè)類似于標(biāo)準(zhǔn)文件系統(tǒng)的接口。與傳統(tǒng)數(shù)據(jù)庫不同,HDFS只能進(jìn)行數(shù)據(jù)存儲(chǔ)和訪問,而不能為數(shù)據(jù)建立索引。無法對(duì)數(shù)據(jù)進(jìn)行簡單的隨機(jī)訪問。但是一些更高級(jí)的抽象已經(jīng)創(chuàng)建出來,用來提供對(duì)Hadoop的更細(xì)粒度的功能,比如HBase。
HBase,Hadoop數(shù)據(jù)庫
一種使HDFS更具可用性的方法是HBase。模仿谷歌的BigTable數(shù)據(jù)庫,HBase也是一個(gè)設(shè)計(jì)用來存儲(chǔ)海量數(shù)據(jù)的列存式數(shù)據(jù)庫。它也屬于NoSQL數(shù)據(jù)庫范疇,類似于Cassandra and Hypertable。
HBase使用HDFS作為底層存儲(chǔ)系統(tǒng),因此也具有通過大量容錯(cuò)分布式節(jié)點(diǎn)來存儲(chǔ)大量的數(shù)據(jù)的能力。與其他的列存儲(chǔ)數(shù)據(jù)庫類似,HBase也提供基于REST和Thrift的訪問API。
由于創(chuàng)建了索引,HBase可以為一些簡單的查詢提供對(duì)內(nèi)容快速的隨機(jī)訪問。對(duì)于復(fù)雜的操作,HBase為Hadoop MapReduce提供數(shù)據(jù)源和存儲(chǔ)目標(biāo)。因此HBase允許系統(tǒng)以數(shù)據(jù)庫的方式與MapReduce進(jìn)行交互,而不是通過底層的HDFS。
Hive
數(shù)據(jù)倉庫或者是使報(bào)告和分析更簡單的存儲(chǔ)方式是SMAQ系統(tǒng)的一個(gè)重要應(yīng)用領(lǐng)域。最初在Facebook開發(fā)的Hive,是一個(gè)建立在Hadoop之上是數(shù)據(jù)倉庫框架。類似于HBase,Hive提供一個(gè)在HDFS上的基于表的抽象,簡化了結(jié)構(gòu)化數(shù)據(jù)的加載。與HBase相比,Hive只能運(yùn)行MapReduce job進(jìn)行批量數(shù)據(jù)分析。如下面查詢那部分描述的,Hive提供了一個(gè)類SQL的查詢語言來執(zhí)行MapReduce job。
Cassandra and Hypertable
Cassandra和 Hypertable都是具有BigTable模式的類似于HBase的列存儲(chǔ)數(shù)據(jù)庫。
作為Apache的一個(gè)項(xiàng)目,Cassandra最初是在Facebook產(chǎn)生的?,F(xiàn)在應(yīng)用在很多大規(guī)模的web站點(diǎn),包括Twitter, Facebook, Reddit and Digg。Hypertable產(chǎn)生于Zvents,現(xiàn)在也是一個(gè)開源項(xiàng)目。
這兩個(gè)數(shù)據(jù)庫都提供與Hadoop MapReduce交互的接口,允許它們作為Hadoop MapReduce job的數(shù)據(jù)源和目標(biāo)。在更高層次上,Cassandra提供與Pig查詢語言的集成(參見查詢章節(jié)),而Hypertable已經(jīng)與Hive集成。
NoSQL數(shù)據(jù)庫的MapReduce實(shí)現(xiàn)
目前為止我們提到的存儲(chǔ)解決方案都是依賴于Hadoop進(jìn)行MapReduce。還有一些NoSQL數(shù)據(jù)庫為了對(duì)存儲(chǔ)數(shù)據(jù)進(jìn)行并行計(jì)算本身具有內(nèi)建的Mapreduce支持。與Hadoop系統(tǒng)的多組件SMAQ架構(gòu)不同,它們提供一個(gè)由storage, MapReduce and query一體組成的自包含系統(tǒng)。
基于Hadoop的系統(tǒng)通常是面向批量處理分析,NoSQL存儲(chǔ)通常是面向?qū)崟r(shí)應(yīng)用。在這些數(shù)據(jù)庫里,MapReduce通常只是一個(gè)附加功能,作為其他查詢機(jī)制的一個(gè)補(bǔ)充而存在。比如,在Riak里,對(duì)MapReduce job通常有一個(gè)60秒的超時(shí)限制,而通常來說, Hadoop 認(rèn)為一個(gè)job可能運(yùn)行數(shù)分鐘或者數(shù)小時(shí)。
下面的這些NoSQL數(shù)據(jù)庫都具有MapReduce功能:
CouchDB,一個(gè)分布式數(shù)據(jù)庫,提供了半結(jié)構(gòu)化的文檔存儲(chǔ)功能。主要特點(diǎn)是提供很強(qiáng)的多副本支持,以及可以進(jìn)行分布式更新。在CouchDB里,查詢是通過使用javascript定義MapReduce的map和reduce階段實(shí)現(xiàn)的。
MongoDB,本身很類似于CouchDB,但是更注重性能,對(duì)于分布式更新,副本,版本的支持相對(duì)弱些。MapReduce也是通過javascript描述的。
Riak,與前面兩個(gè)數(shù)據(jù)庫也很類似。但是更關(guān)注高可用性??梢允褂胘avascript或者Erlang描述MapReduce。
與關(guān)系型數(shù)據(jù)庫的集成
在很多應(yīng)用中,主要的源數(shù)據(jù)存儲(chǔ)在關(guān)系型數(shù)據(jù)庫中,比如Mysql或者Oracle。MapReduce通常通過兩種方式使用這些數(shù)據(jù):
使用關(guān)系型數(shù)據(jù)庫作為源(比如社交網(wǎng)絡(luò)中的朋友列表)
將MapReduce結(jié)果重新注入到關(guān)系型數(shù)據(jù)庫(比如基于朋友的興趣產(chǎn)生的產(chǎn)品推薦列表)
理解MapReduce如何與關(guān)系型數(shù)據(jù)庫交互是很重要的。最簡單的,通過組合使用SQL導(dǎo)出命令和HDFS操作,帶分隔符的文本文件可以作為傳統(tǒng)關(guān)系型數(shù)據(jù)庫和Hadoop系統(tǒng)間的導(dǎo)入導(dǎo)出格式。更進(jìn)一步的講,還存在一些更復(fù)雜的工具。
Sqoop工具是設(shè)計(jì)用來將數(shù)據(jù)從關(guān)系型數(shù)據(jù)庫導(dǎo)入到Hadoop系統(tǒng)。它是由Cloudera開發(fā)的,一個(gè)專注于企業(yè)級(jí)應(yīng)用的Hadoop平臺(tái)經(jīng)銷商。Sqoop是與具體數(shù)據(jù)庫無關(guān)的,因?yàn)樗褂昧薺ava的JDBC數(shù)據(jù)庫API??梢詫⒄麄€(gè)表導(dǎo)入,也可以使用查詢命令限制需要導(dǎo)入的數(shù)據(jù)。
Sqoop也提供將MapReduce的結(jié)果從HDFS導(dǎo)回關(guān)系型數(shù)據(jù)庫的功能。因?yàn)镠DFS是一個(gè)文件系統(tǒng),所以Sqoop需要以分隔符標(biāo)識(shí)的文本為輸入,需要將它們轉(zhuǎn)換為相應(yīng)的SQL命令才能將數(shù)據(jù)插入到數(shù)據(jù)庫。
對(duì)于Hadoop系統(tǒng)來說,通過使用Cascading API中的cascading.jdbc和 cascading-dbmigrate也能實(shí)現(xiàn)類似的功能。
與streaming數(shù)據(jù)源的集成
關(guān)系型數(shù)據(jù)庫以及流式數(shù)據(jù)源(比如web服務(wù)器日志,傳感器輸出)組成了海量數(shù)據(jù)系統(tǒng)的最常見的數(shù)據(jù)來源。Cloudera的Flume項(xiàng)目就是旨在提供流式數(shù)據(jù)源與Hadoop之間集成的方便工具。Flume收集來自于集群機(jī)器上的數(shù)據(jù),將它們不斷的注入到HDFS中。Facebook的Scribe服務(wù)器也提供類似的功能。
商業(yè)性的SMAQ解決方案
一些MPP數(shù)據(jù)庫具有內(nèi)建的MapReduce功能支持。MPP數(shù)據(jù)庫具有一個(gè)由并行運(yùn)行的獨(dú)立節(jié)點(diǎn)組成的分布式架構(gòu)。它們的主要功能是數(shù)據(jù)倉庫和分析,可以使用SQL。
Greenplum:基于開源的PostreSQL DBMS,運(yùn)行在分布式硬件組成的集群上。MapReduce作為SQL的補(bǔ)充,可以進(jìn)行在Greenplum上的更快速更大規(guī)模的數(shù)據(jù)分析,減少了幾個(gè)數(shù)量級(jí)的查詢時(shí)間。Greenplum MapReduce允許使用由數(shù)據(jù)庫存儲(chǔ)和外部數(shù)據(jù)源組成的混合數(shù)據(jù)。MapReduce操作可以使用Perl或者Python函數(shù)進(jìn)行描述。
Aster Data 的nCluster數(shù)據(jù)倉庫系統(tǒng)也提供MapReduce支持。MapReduce操作可以通過使用Aster Data的SQL-MapReduce技術(shù)調(diào)用。SQL-MapReduce技術(shù)可以使SQL查詢和通過各種語言(C#, C++, Java, R or Python)的源代碼定義的MapReduce job組合在一塊。
其他的一些數(shù)據(jù)倉庫解決方案選擇提供與Hadoop的連接器,而不是在內(nèi)部集成MapReduce功能。
Vertica:是一個(gè)提供了Hadoop連接器的列存式數(shù)據(jù)庫。
Netezza:最近由IBM收購。與Cloudera合作提高了它與Hadoop之間的互操作性。盡管它解決了類似的問題,但是實(shí)際上它已經(jīng)不在我們的SMAQ模型定義之內(nèi),因?yàn)樗炔婚_源也不運(yùn)行在普通硬件上。
盡管可以全部使用開源軟件來創(chuàng)建一個(gè)基于Hadoop的系統(tǒng),但是集成這樣的一個(gè)系統(tǒng)仍然需要一些努力。Cloudera的目的就是使得Hadoop更能適應(yīng)用企業(yè)化的應(yīng)用,而且在它們的Cloudera Distribution for Hadoop (CDH)中已經(jīng)提供一個(gè)統(tǒng)一的Hadoop發(fā)行版。
查詢
通過上面的java代碼可以看出使用程序語言定義MapReduce job的map和reduce過程并不是那么的直觀和方便。為了解決這個(gè)問題,SMAQ系統(tǒng)引人了一個(gè)更高層的查詢層來簡化MapReduce操作和結(jié)果查詢。
很多使用Hadoop的組織為了使操作更加方便,已經(jīng)對(duì)Hadoop的API進(jìn)行了內(nèi)部的封裝。有些已經(jīng)成為開源項(xiàng)目或者商業(yè)性產(chǎn)品。
查詢層通常并不僅僅提供用于描述計(jì)算過程的特性,而且支持對(duì)數(shù)據(jù)的存取以及簡化在MapReduce集群上的執(zhí)行流程。
Pig
由yahoo開發(fā),目前是Hadoop項(xiàng)目的一部分。Pig提供了一個(gè)稱為Pig Latin的高級(jí)查詢語言來描述和運(yùn)行MapReduce job。它的目的是讓Hadoop更容易被那些熟悉SQL的開發(fā)人員訪問,除了一個(gè)Java API,它還提供一個(gè)交互式的接口。Pig目前已經(jīng)集成在Cassandra 和HBase數(shù)據(jù)庫中。 下面是使用Pig寫的上面的wordcount的例子,包括了數(shù)據(jù)的加載和存儲(chǔ)過程($0代表記錄的第一個(gè)字段)。
input = LOAD 'input/sentences.txt' USING TextLoader();
words = FOREACH input GENERATE FLATTEN(TOKENIZE($0));
grouped = GROUP words BY $0;
counts = FOREACH grouped GENERATE group, COUNT(words);
ordered = ORDER counts BY $0;
STORE ordered INTO 'output/wordCount' USING PigStorage();
Pig是非常具有表達(dá)力的,它允許開發(fā)者通過UDFs(User Defined Functions )書寫一些定制化的功能。這些UDF使用java語言書寫。盡管它比MapReduce API更容易理解和使用,但是它要求用戶去學(xué)習(xí)一門新的語言。某些程度上它與SQL有些類似,但是它又與SQL具有很大的不同,因?yàn)槟切┦煜QL的人們很難將它們的知識(shí)在這里重用。
Hive
正如前面所述,Hive是一個(gè)建立在Hadoop之上的開源的數(shù)據(jù)倉庫。由Facebook創(chuàng)建,它提供了一個(gè)非常類似于SQL的查詢語言,而且提供一個(gè)支持簡單內(nèi)建查詢的web接口。因此它很適合于那些熟悉SQL的非開發(fā)者用戶。
與Pig和Cascading的需要進(jìn)行編譯相比,Hive的一個(gè)長處是提供即席查詢。對(duì)于那些已經(jīng)成熟的商務(wù)智能系統(tǒng)來說,Hive是一個(gè)更自然的起點(diǎn),因?yàn)樗峁┝艘粋€(gè)對(duì)于非技術(shù)用戶更加友好的接口。Cloudera的Hadoop發(fā)行版里集成了Hive,而且通過HUE項(xiàng)目提供了一個(gè)更高級(jí)的用戶接口,使得用戶可以提交查詢并且監(jiān)控MapReduce job的執(zhí)行。
Cascading, the API Approach
Cascading提供了一個(gè)對(duì)Hadoop的MapReduce API的包裝以使它更容易被java應(yīng)用程序使用。它只是一個(gè)為了讓MapReduce集成到更大的系統(tǒng)中時(shí)更簡單的一個(gè)包裝層。Cascading包括如下幾個(gè)特性:
旨在簡化MapReduce job定義的數(shù)據(jù)處理API
一個(gè)控制MapReduce job在Hadoop集群上運(yùn)行的API
訪問基于Jvm的腳本語言,比如Jython, Groovy, or JRuby.
與HDFS之外的數(shù)據(jù)源的集成,包括Amazon S3,web服務(wù)器
提供MapReduce過程測試的驗(yàn)證機(jī)制
Cascading的關(guān)鍵特性是它允許開發(fā)者將MapReduce job以流的形式進(jìn)行組裝,通過將選定的一些pipes連接起來。因此很適用于將Hadoop集成到一個(gè)更大的系統(tǒng)中。 Cascading本身并不提供高級(jí)查詢語言,由它而衍生出的一個(gè)叫Cascalog的開源項(xiàng)目完成了這項(xiàng)工作。Cascalog通過使用Clojure JVM語言實(shí)現(xiàn)了一個(gè)類似于Datalog的查詢語言。盡管很強(qiáng)大,Cascalog仍然只是一個(gè)小范圍內(nèi)使用的語言,因?yàn)樗炔幌馠ive那樣提供一個(gè)類SQL的語言,也不像Pig那樣是過程性的。下面是使用Cascalog完成的wordcout的例子:
(defmapcatop split [sentence]
(seq (.split sentence "\\s+")))
(?<- (stdout) [?word ?count]
(sentence ?s) (split ?s :> ?word)
(c/count ?count))
使用Solr進(jìn)行搜索
大規(guī)模數(shù)據(jù)系統(tǒng)的一個(gè)重要組件就是數(shù)據(jù)查詢和摘要。數(shù)據(jù)庫層比如HBase提供了對(duì)數(shù)據(jù)的簡單訪問,但是并不具備復(fù)雜的搜索能力。為了解決搜索問題。開源的搜索和索引平臺(tái)Solr通常與NoSQL數(shù)據(jù)庫組合使用。Solr使用Luence搜索技術(shù)提供一個(gè)自包含的搜索服務(wù)器產(chǎn)品。比如,考慮一個(gè)社交網(wǎng)絡(luò)數(shù)據(jù)庫,MapReduce可以使用一些合理的參數(shù)用來計(jì)算個(gè)人的影響力,這個(gè)數(shù)值會(huì)被寫回到數(shù)據(jù)庫。之后使用Solr進(jìn)行索引,就允許在這個(gè)社交網(wǎng)絡(luò)上進(jìn)行一些操作,比如找到最有影響力的人。
最初在CENT開發(fā),現(xiàn)在作為Apache項(xiàng)目的Solr,已經(jīng)從一個(gè)單一的文本搜索引擎演化為支持導(dǎo)航和結(jié)果聚類。此外,Solr還可以管理存儲(chǔ)在分布式服務(wù)器上的海量數(shù)據(jù)。這使得它成為在海量數(shù)據(jù)上進(jìn)行搜索的理想解決方案,以及構(gòu)建商業(yè)智能系統(tǒng)的重要組件。
總結(jié)
MapReduce尤其是Hadoop實(shí)現(xiàn)提供了在普通服務(wù)器上進(jìn)行分布式計(jì)算的強(qiáng)有力的方式。再加上分布式存儲(chǔ)以及用戶友好的查詢機(jī)制,它們形成的SMAQ架構(gòu)使得海量數(shù)據(jù)處理通過小型團(tuán)隊(duì)甚至個(gè)人開發(fā)也能實(shí)現(xiàn)。
現(xiàn)在對(duì)數(shù)據(jù)進(jìn)行深入的分析或者創(chuàng)建依賴于復(fù)雜計(jì)算的數(shù)據(jù)產(chǎn)品已經(jīng)變得很廉價(jià)。其結(jié)果已經(jīng)深遠(yuǎn)的影響了數(shù)據(jù)分析和數(shù)據(jù)倉庫領(lǐng)域的格局,降低了該領(lǐng)域的進(jìn)入門檻,培養(yǎng)了新一代的產(chǎn)品,服務(wù)和組織方式。這種趨勢(shì)在Mike Loukides的"What is Data Science?"報(bào)告中有更深入的詮釋。
Linux的出現(xiàn)僅僅通過一臺(tái)擺在桌面上的linux服務(wù)器帶給那些創(chuàng)新的開發(fā)者們以力量。SMAQ擁有同樣大的潛力來提高數(shù)據(jù)中心的效率,促進(jìn)組織邊緣的創(chuàng)新,開啟廉價(jià)創(chuàng)建數(shù)據(jù)驅(qū)動(dòng)業(yè)務(wù)的新時(shí)代。