關(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的原理是比較簡單的,并且目前流行大部分語言都能實(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ù)庫的分布式計(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ù)庫來說,具有天然的可擴(kuò)展性和支持海量數(shù)據(jù)存儲(chǔ)的能力,并且對(duì)非結(jié)構(gòu)化的數(shù)據(jù)處理能力完全超越于傳統(tǒng)的數(shù)據(jù)庫技術(shù)。例如,當(dāng)MySQL運(yùn)行的集群節(jié)點(diǎn)達(dá)到100臺(tái)以上,雖然說理論上MySQL單張表的最大數(shù)據(jù)容量可以達(dá)到2T,但是如果真正需要依靠MySQL來存儲(chǔ)的數(shù)據(jù)上T再加上大并發(fā)的用戶訪問,無論是維護(hù)還是操作都是非常頭痛的事情,讓MySQL或者傳統(tǒng)數(shù)據(jù)庫肩負(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)用,在這些場合,MapReduce可以成為傳統(tǒng)數(shù)據(jù)庫的良好補(bǔ)充,而不是替代品。 某些特定的場景中要存儲(chǔ)上億個(gè)文件本身就是一個(gè)頭疼的問題,還要找出上億個(gè)文件中存儲(chǔ)的文檔、圖片、網(wǎng)頁 哪個(gè)最大,并且還要分別列出3類,那更是雪上加霜,但利用Hadoop提供的MapReduce框架,基于HDFS分布式海量數(shù)據(jù)存儲(chǔ)的手段,相對(duì)傳統(tǒng)的方法而言會(huì)輕松一點(diǎn),因?yàn)槔肏adoop的技術(shù)可以讓廉價(jià)的機(jī)器組成在一起帶來更高的計(jì)算性能,并且支持海量存儲(chǔ),換而言之,如果你的數(shù)據(jù)還沒有上千萬 上了Hadoop基本上是用“關(guān)公的大刀切青菜”,資源浪費(fèi)。 Hadoop并非是完全用于非結(jié)構(gòu)化和半結(jié)構(gòu)化的數(shù)據(jù)處理,在Apache Hadoop的MapReduce中為了方便MapReduce直接訪問關(guān)系型數(shù)據(jù)庫(Mysql,Oracle),MapReduce輸入的鍵和值并不是數(shù)據(jù)固有的屬性,可以人為的來選擇數(shù)據(jù)來源。Hadoop提供了DBInputFormat和DBOutputFormat兩個(gè)類。這樣就可以將現(xiàn)有數(shù)據(jù)庫中的數(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ù)庫。關(guān)鍵字:DBOutputFormat、DBInputFormat、DBConfiguration,根據(jù)這幾個(gè)關(guān)鍵字可以Google到更多結(jié)果,暫時(shí)先不提供代碼了,稍后會(huì)提供完整的代碼示例和個(gè)人見解,需要了解的同學(xué)可以先看看這里(Ref)。 讓我更值得關(guān)注的是如何將mapreduce使用在適合的場景,將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)吧。
|
|