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