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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MapReduce简述

發(fā)布時間:2023/12/4 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MapReduce简述 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

MapReduce

參考:

https://www.cnblogs.com/lixiansheng/p/8942370.html

https://baike.baidu.com/item/MapReduce/133425?fr=aladdin

概念

MapReduce是面向大數(shù)據(jù)并行處理的計算模型,用于大規(guī)模數(shù)據(jù)集的并行計算。它提供了一個龐大但設(shè)計精良的并行計算軟件框架,能自動完成計算任務(wù)的并行化處理,自動劃分計算數(shù)據(jù)和計算任務(wù),在集群節(jié)點上自動分配和執(zhí)行任務(wù)以及收集計算結(jié)果,將數(shù)據(jù)分布存儲、數(shù)據(jù)通信、容錯處理等并行計算涉及到的很多系統(tǒng)底層的復(fù)雜細(xì)節(jié)交由系統(tǒng)負(fù)責(zé)處理。

體系結(jié)構(gòu)

MapReduce體系結(jié)構(gòu)主要由四部分組成:Client, JobTracker, TaskTracker, Task。

  • Client:用戶編寫MapReduce程序通過Client提交到JobTracker端,用戶可以通過Client提供的接口查看作業(yè)的運(yùn)行狀態(tài)。
  • JobTracker:負(fù)責(zé)資源監(jiān)控和作業(yè)調(diào)度,JobTracker監(jiān)控所有TaskTracker與Job的健康狀況,一旦發(fā)現(xiàn)失敗,就將相應(yīng)的任務(wù)轉(zhuǎn)移到其他節(jié)點。 JobTracker會跟蹤任務(wù)的執(zhí)行進(jìn)度、資源使用量等信息,并將這些信息告訴任務(wù)調(diào)度器TaskScheduler,而調(diào)度器會在資源出現(xiàn)空閑時,選擇合適的任務(wù)去使用這些資源。
  • TaskTracker:TaskTracker會周期性地通過“心跳”將本節(jié)點上資源的使用情況和任務(wù)的運(yùn)行進(jìn)度匯報給JobTracker,同時接收J(rèn)obTracker發(fā)送過來的命令并執(zhí)行相應(yīng)的操作(如啟動新任務(wù)、殺死任務(wù)等)。 TaskTracker使用slot等量劃分本節(jié)點上的資源量(CPU、內(nèi)存等)。一個Task獲取到一個slot后才有機(jī)會運(yùn)行,而Hadoop調(diào)度器的作用就是將各個TaskTracker上的空閑slot分配給Task使用。slot分為Map slot和Reduce slot兩種,分別供Map Task和Reduce Task使用。
  • Task:分為Map Task和Reduce Task,均由Task Tracker啟動。

工作原理


User Program鏈接了MapReduce庫,實現(xiàn)了最基本的Map函數(shù)和Reduce函數(shù)。

  • MapReduce庫先把User Program的輸入文件劃分為m份(用戶定義),通常每一份16mb~64mb,如圖劃分為split 0 ~ split 4。
  • 使用fork()將用戶進(jìn)程拷貝到集群內(nèi)其他機(jī)器上,其中一個稱為master,其余稱為worker。master負(fù)責(zé)調(diào)度,為空閑worker分配作業(yè)(Map作業(yè)或者Reduce作業(yè)),worker的數(shù)量也是由用戶指定。
  • 被分配了Map作業(yè)的worker,開始讀取對應(yīng)分片的輸入數(shù)據(jù)。Map作業(yè)從輸入數(shù)據(jù)中抽取鍵值對,每一個鍵值對都作為參數(shù)傳遞給map函數(shù),map函數(shù)產(chǎn)生的中間鍵值對(中間結(jié)果)被緩存在內(nèi)存中。
  • 緩存的中間鍵值對(中間結(jié)果)會被定期寫入本地磁盤,而且被分為R個區(qū),R的大小是由用戶定義的,將來每個區(qū)會對應(yīng)一個Reduce作業(yè)。這些中間鍵值對(中間結(jié)果)的位置會被通報給master,master負(fù)責(zé)將信息轉(zhuǎn)發(fā)給Reduce worker。
  • master向分配了Reduce作業(yè)的worker通知它所負(fù)責(zé)的分區(qū)的位置,當(dāng)Reduce worker把所有它負(fù)責(zé)的中間鍵值對都讀過來后,先對它們進(jìn)行排序,使得相同鍵的鍵值對聚集在一起。對于每個唯一的鍵,都將鍵與關(guān)聯(lián)的值傳遞給reduce函數(shù),reduce函數(shù)產(chǎn)生的輸出會添加到這個分區(qū)的輸出文件中。
  • 當(dāng)所有的Map和Reduce作業(yè)都完成了,master喚醒正版的user program,MapReduce函數(shù)調(diào)用返回user program的代碼。

案例:統(tǒng)計詞頻

如果想統(tǒng)計下過去10年計算機(jī)論文出現(xiàn)最多的幾個單詞,看看大家都在研究些什么,那收集好論文后,該怎么辦呢?

方法一:我可以寫一個小程序,把所有論文按順序遍歷一遍,統(tǒng)計每一個遇到的單詞的出現(xiàn)次數(shù),最后就可以知道哪幾個單詞最熱門了。

這種方法在數(shù)據(jù)集比較耗時,是非常有效的,而且實現(xiàn)最簡單,用來解決這個問題很合適。

方法二:寫一個多線程程序,并發(fā)遍歷論文。

這個問題理論上是可以高度并發(fā)的,因為統(tǒng)計一個文件時不會影響統(tǒng)計另一個文件。當(dāng)我們的機(jī)器是多核或者多處理器,方法二肯定比方法一高效。但是寫一個多線程程序要比方法一困難多了,我們必須自己同步共享數(shù)據(jù),比如要防止兩個線程重復(fù)統(tǒng)計文件。

方法三:把作業(yè)交給多個計算機(jī)去完成。

我們可以使用方法一的程序,部署到N臺機(jī)器上去,然后把論文集分成N份,一臺機(jī)器跑一個作業(yè)。這個方法跑得足夠快,但是部署起來很麻煩,我們要人工把程序copy到別的機(jī)器,要人工把論文集分開,最痛苦的是還要把N個運(yùn)行結(jié)果進(jìn)行整合(當(dāng)然我們也可以再寫一個程序)。

方法四:使用MapReduce

MapReduce本質(zhì)上就是方法三,但是如何拆分文件集,如何copy程序,如何整合結(jié)果等,這些都是框架定義好的。我們只要定義好這個任務(wù)用戶程序(Map函數(shù)和Reduce函數(shù)),其它都交給MapReduce。

總結(jié)

以上是生活随笔為你收集整理的MapReduce简述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。