當前位置:編程學習大全網 - 編程語言 - R的MapReduce庫問題,怎麽解決

R的MapReduce庫問題,怎麽解決

Map和Reduce執行流程:

壹切都是從最上方的user program開始的,user program鏈接了MapReduce庫,實現了最基本的Map函數和Reduce函數。圖中執行的順序都用數字標記了。

1.MapReduce庫先把user program的輸入文件劃分為M份(M為用戶定義),每壹份通常有16MB到64MB,如圖左方所示分成了split0~4;然後使用fork將用戶進程拷貝到集群內其它機器上。

2.user program的副本中有壹個稱為master,其余稱為worker,master是負責調度的,為空閑worker分配作業(Map作業或者Reduce作業),worker的數量也是可以由用戶指定的。

3.被分配了Map作業的worker,開始讀取對應分片的輸入數據,Map作業數量是由M決定的,和split壹壹對應;Map作業從輸入數據中抽取出鍵值對,每壹個鍵值對都作為參數傳遞給map函數,map函數產生的中間鍵值對被緩存在內存中。

4.緩存的中間鍵值對會被定期寫入本地磁盤,而且被分為R個區,R的大小是由用戶定義的,將來每個區會對應壹個Reduce作業;這些中間鍵值對的位置會被通報給master,master負責將信息轉發給Reduce worker。

5.master通知分配了Reduce作業的worker它負責的分區在什麽位置(肯定不止壹個地方,每個Map作業產生的中間鍵值對都可能映射到所有R個不同分區),當Reduce worker把所有它負責的中間鍵值對都讀過來後,先對它們進行排序,使得相同鍵的鍵值對聚集在壹起。因為不同的鍵可能會映射到同壹個分區也就是同壹個Reduce作業(誰讓分區少呢),所以排序是必須的。

6.reduce worker遍歷排序後的中間鍵值對,對於每個唯壹的鍵,都將鍵與關聯的值傳遞給reduce函數,reduce函數產生的輸出會添加到這個分區的輸出文件中。

7.當所有的Map和Reduce作業都完成了,master喚醒正版的user program,MapReduce函數調用返回user program的代碼。

所有執行完畢後,MapReduce輸出放在了R個分區的輸出文件中(分別對應壹個Reduce作業)。用戶通常並不需要合並這R個文件,而是將其作為輸入交給另壹個MapReduce程序處理。整個過程中,輸入數據是來自底層分布式文件系統(GFS)的,中間數據是放在本地文件系統的,最終輸出數據是寫入底層分布式文件系統(GFS)的。而且我們要註意Map/Reduce作業和map/reduce函數的區別:Map作業處理壹個輸入數據的分片,可能需要調用多次map函數來處理每個輸入鍵值對;Reduce作業處理壹個分區的中間鍵值對,期間要對每個不同的鍵調用壹次reduce函數,Reduce作業最終也對應壹個輸出文件。

  • 上一篇:飛天小女警的全集目錄,不要Z!!!!!
  • 下一篇:瑞聲光電科技(常州)有限公司怎麽樣?
  • copyright 2024編程學習大全網