日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Coursera课程笔记】Web智能和大数据Week3_MapReduce

發布時間:2024/9/21 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Coursera课程笔记】Web智能和大数据Week3_MapReduce 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文目的

到今天為止,Coursera上的課程Web Intelligence and Big Data[5]已經上到Week 3(從0開始計數,實際上是4周)。前幾周講了一些機器學習的算法,如LHSPageRank,樸素貝葉斯分類器等。但是光有這些算法還不夠,特別是在當前這種海量數據(Big Data)盛行的年代。所以,Week 3就聊到了一種通用的大數據處理解決方法?——Map Reduce(后面簡稱MR)。此方法最初來自Google的一篇論文[1],現在用來指代一種編程方式,主要作用與大規模數據集(通常在1T以上)的并行計算(很多算法都可以用MR方式實現)。本周課程主要內容介紹了MR的編程模型(結合Mincemeat[2]Octopy[3]),運作原理和計算效率。在這里簡單記錄本周內容,作為備忘,對后面的工作會有幫助。

?

MapReduce編程方式

MR是一種編程模式。基于這種編程模式,可以有多種實現,鼎鼎大名的Hadoop就是其中之一。在MR的世界中,你只需要實現兩個方法:mapreduce,剩下的所有事情交給MR框架,比如消息處理,中間數據存儲,數據合并,容錯等。

?

上千個廉價PC機并行處理,難免會出現服務器故障,至少出現一臺服務器出錯的概率為1-Pk,也就意味著隨著機器數量K的增加,概率會趨近于1

?

Map函數的輸入可以是任意序列,但輸出必須是一個鍵值對{K,V},這一點很重要,因為MR框架會根據K,將不同K對應的V合并成一個列表,得到{KV–List},然后將其作為reduce函數的輸入,reduce的輸出可以是任意數據。舉個例子,有下列map和輸出:

???????? map1?–> {‘one’,1}, {‘two’,1}, {‘three’,1}

???????? map2--?–> {‘two’,1}, {‘world,1}

???????? map3--?–>{‘three,1}

那么經過合并后,得到中結果:

??????? {‘one’, [1]}, {‘two’, [1,1]}, {‘three’, [1,1]}, {‘world’, [1]}

最后,MR框架會均勻的將上面的鍵值對分發給不同的Reduce函數。

?

由于Hadoop的環境搭建相對困難,如果想體驗MR的編程方式,可以使用輕量級的MR框架Mincemeat[2]需要注意,在自定義mapreduce函數中,如果要引用外部函數或對象,需要在函數定義中import,否則會報錯)或Octopy[3]

?

Mincemeat代碼學習

Mincemeat的源代碼十分小,去掉注釋,只有不到350行(是不是有點震精!)。但是麻雀雖小五臟俱全,具有MR的基本特性:

l??并行計算

l??容錯

l??安全

?

Mincemeat運行原理

Mincemeat主要分兩塊:ServerClientServer只有一個進程,用于調度,確保安全和執行容錯的邏輯。Client就是真正做計算的進程(其他資料也稱為Worker進程)。Mincemeat的網絡通訊(ServerClient之間)采用的是Python內置的異步數據通訊框架asynchatPython對本地SelectPoll的封裝)。異步框架相對于多線程有個優點,不用處理線程間數據同步。這一點很重要,因為Mincemeat主要處理大數據并行計算,這樣可以省去不少數據同步的開銷。

Server啟動后會監聽端口11235,等待處理數據的Client進程。一旦有Client主動與Server連接,Server會與Client進行一些交互,大致如下,

1.??????鑒權?根據預先設定的密碼,確保次client的“合法性”

2.??????傳遞方法?由于mapreducecollect(可選)方法只在Server端定義,所以Server會將這些方法傳遞給Client。數據傳遞通過Python內置的marshal模塊,對函數定義進行編碼和解碼。

3.? ? ?Map階段?Server會傳遞部分原始數據給Client并等待其處理結果。這里Mincemeat引入了collect環節,可以理解為一個mini reduce過程,其輸入是一個局部的{K, V-List},該數據從當前Map處理的原始數據計算得到。

4.??????Reduce階段?server會將map階段的結果融合,然后將每一個{KV -list}作為此階段的輸入

5.? ? ??結束?Server會將所有Reduce返回的結果合并,返回最后結果

?

TipsClient可以在計算的任何時候map階段或reduce階段均可以)加入計算,比如一開始只有1Work計算,發現時間仍然很久,那么可以在其它計算機上啟動client連接server,一起參與計算。或者,如果本機有多核,也可以同時啟動多個進程,最大限度的利用多核計算能力。

?

MincemeatClient容錯能力。重源代碼中,不難發現在map階段(reduce階段類似),Mincemeat會標記每個Client處理的數據,標記使用原始輸入的key。那么,Mincemeat就可以追蹤每一塊數據處理的狀態,比如某個服務器宕機了,那么它當前處理的數據必然無法正確返回給ServerServer會在后面的某個時候將同樣的數據分給其他的Client但是沒有Server容錯,所以一旦Server掛掉,整個計算無法完成。

?

Mincemeat的優點和不足

個人能認為,Mincemeat適合MR學習和科學研究。如果使用在商業環境下會有下面的不足:1)沒有Server容錯,不穩定。2)計算結果放在內存中,所以一旦輸出結果超過內存限制,那么Mincemeat無能為力。3)缺少自動化部署和執行client很局限,目前只能手動添加client,而且每個client的狀態也不能事實顯示。

雖然這樣,我覺得Mincemeat還是很優秀的:1)比起同類的Octopy而言,效率要高很多;2)科研環境中,如果只做一兩次MR并行計算,跑跑數據,寫論文,整幾臺服務器,用Mincemeat跑跑成本還是很低的。3)簡單,門檻低,為后面使用Hadoop等商業的MR框架打下基礎。

?

MapReduce效率

MR框架會生成許多中間結果,這些中間結果的量級往往和輸入數據相當,所以MR框架往往與分布式文件系統(DFS)是一對好基友。HDFS就是構建在Hadoop框架之上的分布式文件系統。這里,想用一種直觀的方法討論一下MapReduce的計算效率。

假設需要處理的數據量DMR產生的中間結果為σDσ是一個系數。ωD為單機處理D所需要做的計算量。P為MR框架可以并行的個數,那么效率公式如下:

其中c是常量,MR的工作量等于每個處理器需要處理的實際工作量,在加上需要傳輸的中間結果。可以看到,MR的工作效率與處理器的數目(map+reduce的數目)沒有關系,只與

σ有關,也就是與中間數據的比例有關。在使用MR框架計算時,需要盡可能的減少σ,提高MR的工作效率

?

?

希望這篇文章對你理解MR有幫助!

?

?

參考資料

[1]???????MapReduce Simplified Data Processing on Large Clusters

[2]???????Mincemeat Project on Github

[3]???????Octopy: Easy MapReduce for Python

[4]???????mincemeat.py-最精簡的MapReduce引擎實現

[5]???????Coursera : Web Intelligence and Big Data

?

聲明:如有轉載本博文章,請注明出處。您的支持是我的動力!文章部分內容來自互聯網,本人不負任何法律責任。 本文轉自bourneli博客園博客,原文鏈接:http://www.cnblogs.com/bourneli/archive/2013/04/20/3033325.html,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的【Coursera课程笔记】Web智能和大数据Week3_MapReduce的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。