關(guān)于MapReduce的一些廢話 我的廢話1: 這篇文章不講述有關(guān)mapreduce的具體技術(shù)和代碼示例,,只是談?wù)勎覍?duì)mapreduce初試+摸索階段的感受,所以歡迎各路英雄的板磚向我拋來,。 我的廢話2: MapReduce 讓運(yùn)算散列 且 并行著,。 MapReduce被業(yè)界認(rèn)定是Google推出,如今也不是什么新的技術(shù),,自從Apache的hadoop項(xiàng)目啟動(dòng)以來MapReduce就是整個(gè)Hadoop項(xiàng)目的核心內(nèi)容,,Pig、Hive和Hbase都是針對(duì)mapreduce框架的實(shí)現(xiàn)工具,,所以對(duì)Hbase,、Hive、Pig的深入了解必須對(duì)MapReduce有一定研究,,以我自己的理解MapReduce就是把要計(jì)算的大型數(shù)據(jù)集切分成多個(gè)小的分區(qū),,根據(jù)這些被劃分的小分區(qū)創(chuàng)建多個(gè)對(duì)應(yīng)的任務(wù)去計(jì)算這些被切分的數(shù)據(jù),,在集群的節(jié)點(diǎn)上結(jié)合分區(qū)表分布式的執(zhí)行計(jì)算,中間有調(diào)度器和計(jì)數(shù)器的環(huán)節(jié),最后再把多個(gè)任務(wù)的計(jì)算結(jié)果進(jìn)行合并,,輸出計(jì)算的結(jié)果,。在這些執(zhí)行每個(gè)分塊的分布式集群節(jié)點(diǎn)中,可以使用非常廉價(jià)的機(jī)器,,這樣就可以使用低端的設(shè)備組成一個(gè)超大的型的運(yùn)算,。 MapReduce的原理是比較簡(jiǎn)單的,并且目前流行大部分語(yǔ)言都能實(shí)現(xiàn),。如今Yahoo利用MapReduce定期在搜索業(yè)務(wù)上使用Hadoop來提高其產(chǎn)品和服務(wù),,如排名功能和目標(biāo)廣告。Google利用MapReduce來進(jìn)行分布排序,,web連接圖反轉(zhuǎn),,每臺(tái)機(jī)器的詞矢量,web訪問日志分析,,也有一些開源項(xiàng)目利用MapReduce來實(shí)現(xiàn)產(chǎn)品的功能,,例如:最著名的MongoDB和Apache的Nutch,還有一些項(xiàng)目提出使用MapReduce來執(zhí)行對(duì)數(shù)據(jù)庫(kù)的分布式計(jì)算,,例如:Gearman(Ref),運(yùn)行在微軟云計(jì)算平臺(tái)上的lokad-cloud(Ref) ,。 MySpace也自己研制的MapReduce框架Qizmt開源了(Ref),,可用于在大規(guī)模Windows集群上開發(fā)或運(yùn)行分布式計(jì)算程序。 對(duì)于在Hadoop中涵蓋的技術(shù)(Hive/HBase/Pig)對(duì)于傳統(tǒng)的數(shù)據(jù)庫(kù)來說,,具有天然的可擴(kuò)展性和支持海量數(shù)據(jù)存儲(chǔ)的能力,,并且對(duì)非結(jié)構(gòu)化的數(shù)據(jù)處理能力完全超越于傳統(tǒng)的數(shù)據(jù)庫(kù)技術(shù)。例如,,當(dāng)MySQL運(yùn)行的集群節(jié)點(diǎn)達(dá)到100臺(tái)以上,,雖然說理論上MySQL單張表的最大數(shù)據(jù)容量可以達(dá)到2T,但是如果真正需要依靠MySQL來存儲(chǔ)的數(shù)據(jù)上T再加上大并發(fā)的用戶訪問,,無(wú)論是維護(hù)還是操作都是非常頭痛的事情,,讓MySQL或者傳統(tǒng)數(shù)據(jù)庫(kù)肩負(fù)超大型的數(shù)據(jù)運(yùn)算/查詢,化九牛二虎之力跑起來穩(wěn)定一段時(shí)間過后,,我想也會(huì)把MySQL累個(gè)半死,,這是也并不是說讓Hadoop/MapReduce/Hive 這些技術(shù)去替代傳統(tǒng)的技術(shù),而是希望Hadoop/MapReduce/Hive去用于做數(shù)據(jù)轉(zhuǎn)換或者裝載的(ETL)方面的工作,,MapReduce適合海量數(shù)據(jù)數(shù)據(jù)被一次寫入和多次讀取的應(yīng)用,,在這些場(chǎng)合,MapReduce可以成為傳統(tǒng)數(shù)據(jù)庫(kù)的良好補(bǔ)充,,而不是替代品,。 某些特定的場(chǎng)景中要存儲(chǔ)上億個(gè)文件本身就是一個(gè)頭疼的問題,,還要找出上億個(gè)文件中存儲(chǔ)的文檔、圖片,、網(wǎng)頁(yè) 哪個(gè)最大,,并且還要分別列出3類,那更是雪上加霜,,但利用Hadoop提供的MapReduce框架,,基于HDFS分布式海量數(shù)據(jù)存儲(chǔ)的手段,相對(duì)傳統(tǒng)的方法而言會(huì)輕松一點(diǎn),,因?yàn)槔肏adoop的技術(shù)可以讓廉價(jià)的機(jī)器組成在一起帶來更高的計(jì)算性能,,并且支持海量存儲(chǔ),換而言之,,如果你的數(shù)據(jù)還沒有上千萬(wàn) 上了Hadoop基本上是用“關(guān)公的大刀切青菜”,,資源浪費(fèi)。 Hadoop并非是完全用于非結(jié)構(gòu)化和半結(jié)構(gòu)化的數(shù)據(jù)處理,,在Apache Hadoop的MapReduce中為了方便MapReduce直接訪問關(guān)系型數(shù)據(jù)庫(kù)(Mysql,Oracle),,MapReduce輸入的鍵和值并不是數(shù)據(jù)固有的屬性,可以人為的來選擇數(shù)據(jù)來源,。Hadoop提供了DBInputFormat和DBOutputFormat兩個(gè)類,。這樣就可以將現(xiàn)有數(shù)據(jù)庫(kù)中的數(shù)據(jù)轉(zhuǎn)儲(chǔ)到Hadoop/HDFS中,由MapReduce進(jìn)行分布式計(jì)算,,通過MapReduce框架對(duì)海量數(shù)據(jù)進(jìn)行分析,,或者也可以倒過來從海量的非結(jié)構(gòu)/半結(jié)構(gòu)/結(jié)構(gòu)化的數(shù)據(jù)分析,將計(jì)算的結(jié)果存儲(chǔ)到數(shù)據(jù)庫(kù),。關(guān)鍵字:DBOutputFormat,、DBInputFormat、DBConfiguration,,根據(jù)這幾個(gè)關(guān)鍵字可以Google到更多結(jié)果,,暫時(shí)先不提供代碼了,稍后會(huì)提供完整的代碼示例和個(gè)人見解,,需要了解的同學(xué)可以先看看這里(Ref),。 讓我更值得關(guān)注的是如何將mapreduce使用在適合的場(chǎng)景,將hadoop mapreduce的框架用途發(fā)揮到極致,,或者說當(dāng)面對(duì)大型計(jì)算該如何借用mapreduce框架,、原理將計(jì)算進(jìn)項(xiàng)散列在不同的計(jì)算機(jī)上去執(zhí)行同一份作業(yè),去更高的發(fā)揮機(jī)器的資源,,更快的得到計(jì)算的運(yùn)行結(jié)果,,我想這才是使用mapreduce真正的目標(biāo)吧。
|
|