Google MapReduce到底解決什麼問題?

2022-02-10 18:59:45 字數 1595 閱讀 3933

很多時候,定義清楚問題比解決問題更難。

什麼是mapreduce?

它不是乙個產品,而是一種解決問題的思路,它有多個工程實現,google在**中也給出了它自己的工程架構實現。

mapreduce這個程式設計模型解決什麼問題?

能夠用分治法解決的問題,例如:

畫外音:能夠發現,現實中有許多基於分治的應用需求。

為什麼是google,發明了這個模型?

google網頁抓取,分析,倒排的多個應用場景,當時的技術體系,解決不了google大資料量高併發量的需求,google被迫進行技術創新,思考出了這個模型。

畫外音:誰痛誰想辦法。

為什麼mapreduce對「能夠用分治法解決的問題」特別有效?

分治法,是將乙個大規模的問題,分解成多個小規模的問題(分),多個小規模問題解決,再統籌小問題的解(合),就能夠解決大規模的問題。

分治法詳見《分治法與減治法》

google mapreduce為什麼能夠成功?

畫外音:mapreduce系統架構,能在大規模普通pc集群上實現並行處理,和gfs等典型的網際網路架構類似。

使用者僅僅關注少量介面,不用關心並行、容錯、資料分布、負載均衡等細節,又能夠解決很多實際的問題,還有這等好事!

能不能舉乙個例子,說明下mapreduce的map函式與reduce函式是如何解決實際問題的?

舉例:假設要統計大量文件中單詞出現的個數。

map

輸入kv:pair(文件名稱,文件內容)

輸出kv:pair(單詞,1)

畫外音:乙個單詞出現一次,就輸出乙個1。

reduce

輸入kv:pair(單詞,1)

輸入kv:pair(單詞,總計數)

以下是一段偽**,

map(list){

foreach(pair in list)

foreach($word in $doc_content)

echo pair($word, 1); // 輸出list

畫外音:如果有多個map程序,輸入可以是乙個pair,不是乙個list。

reduce(list){// 大量(單詞,1)

mapresult;

foreach(pair in list)

result[$word] += $count;

foreach($keyin result)

echo pair($key, result[$key]); // 輸出list

畫外音:即使有多個reduce程序,輸入也是list,因為它的輸入是map的輸出。

最早在單機的體系下計算,輸入資料量巨大的時候,處理很慢。如何能夠在短時間內完成處理,很容易想到的思路是,將這些計算分布在成百上千的主機上,但此時,會遇到各種複雜的問題,例如:

這些綜合到一起,就成為了乙個困難的問題,這也是google mapreduce工程架構要解決的問題

Google MapReduce到底解決什麼問題?

很多時候,定義清楚問題比解決問題更難。什麼是mapreduce?它不是乙個產品,而是一種解決問題的思路,它有多個工程實現,google在 中也給出了它自己的工程架構實現。mapreduce這個程式設計模型解決什麼問題?能夠用分治法解決的問題,例如 畫外音 能夠發現,現實中有許多基於分治的應用需求。為...

PlaceHolder到底什麼

placeholder 是乙個佔位控制項,可以在裡面新增子控制項。這二者是用於母版技術的。contentplaceholder 用在母版頁中,表示這裡面的內容可以被 aspx 頁中的 content 內容替換,當然 aspx 頁也可以不理會它。content 就是用於 aspx 頁的,content...

到底丟了什麼

今天不小心把手機丟了。是丟了,確切的說是被人拿走了,我放在桌子上,然後乙個轉身就沒有了,我不知道這叫不叫作偷,暫且叫做拿走吧。本來我早下班約好等 十尺 下班一起回家,丟了手機頓時不知所措。只能東奔西跑找個公用 這東西如今真難找啊!不是ic卡就是投幣 平時有手機根本就沒有ic卡,碰巧口袋裡也找不出個硬...