MapReduce通俗語言講述執行原理

2021-10-10 11:20:45 字數 1242 閱讀 2234

先假設乙個待解決的問題:如何把乙份300m的檔案,統計到每個單詞的詞頻輸出出來?

首先,將這個任務分解為以下幾個大的步驟:

把檔案寫進datanode;

將計算框架分發到各個datanode,讀取檔案內容並進行計算,這個過程就是mapreduce的過程

將計算完的結果寫進磁碟

從客戶端寫入檔案,涉及到的步驟主要是,請求寫入-反饋節點-開始寫入-日誌更新

第二步,客戶端根據返回的節點引數對檔案進行切塊,3個節點切為128+128+44的大小,然後開始向dn1請求傳送檔案,dn1呼叫dn2,dn2呼叫dn3,就形成了乙個通訊管道,然後使用bytebuffer依次在各個節點上寫入檔案。所有檔案塊寫完之後,向客戶端返回結果。

第三步,客戶端向yarn反饋寫入結果,建立本次寫入的editlog日誌,由secondarynamenode合併日誌和namenode上的fsimage映象檔案,合併完之後把這個新的fsimage發給namenode,然後namenode的映象檔案。到這整個寫入的過程就結束了。

第一步,通過inputformat確定讀取方式(預設是text),用recordreader去讀取檔案塊,迴圈一次讀一行,也就是乙個鍵值對;作為引數傳入到map方法裡,計算完後,把計算後的結果組裝成鍵值對通過context.write發出去,發出去之後再去接收乙個新的行。

第二步,計算完之後,map物件把結果都發到outputcollector,然後再由收集器把資料傳送到100m容量的環形緩衝區(陣列)。

第三步,環形緩衝區資料每達到80%,就會溢位生成乙個小檔案。溢位之前會做分割槽計算,hash鍵值對的鍵,並且對小檔案內做快排排序。

第四步,shuffle(洗牌)過程開始,如果設定了combiner,則會在排序時進行區域性的value合併。檔案塊較大時會溢位多個檔案,然後再對多個小檔案進行merge歸併排序操作,最終形成乙個大檔案,這個大檔案是分割槽且區內有序的。到這裡map端的shuffle過程就結束了。

第五步,所有分割槽的map任務都結束以後,然後啟動相應數量的reduce任務,乙個reduce處理乙個分割槽的資料。reduce任務會從不同的map中拉取到相應分割槽中的資料,然後在reduce的shuffle過程會再一次進行歸併排序,最終形成乙個鍵有序的大檔案。shuffle過程結束。

第六步,進入到reduce方法之前,會通過groupingcomparator進行一次聚合分組,分組完之後然後每對鍵值會依次進入到reduce方法內進行邏輯計算。

第七步,計算完之後,呼叫outputformat方法將資料寫入磁碟,形成檔案(part-r-000**)

通俗語言了解CDN

對於程式設計師來說,cdn應該不陌生。比如我們用一些比較常見的類庫時,各個大廠都會有cdn。例如jquery,bootstrap之類的。這些的卻算是cdn的應用,但是我們不應該只是了解cdn到這個地步。接下來再多了解一點吧。cdn的全稱是content delivery network,即內容分發網...

資料結構 通俗語言描述KMP演算法核心

樸素的求母串s裡有多少個子串t,就是母串裡從1開始到末尾,擷取和子串相同長度的一段字串,和子串t比,一樣就返回1不一樣就繼續取下一串。要是子串裡的字元都是不一樣的就是這麼比的,但是子串裡要是有一些是重複的,這樣比就多比了很多步。next陣列就是,把子串裡各個字元位置的下標值定義為乙個陣列,告訴你這個...

MapReduce通俗解釋方法

mapreduce是google開源的三大技術之一,是對海量資料進行 分而治之 計算框架。為了簡單的理解並講述給客戶理解。我們舉下面的例子來說明.首先,面對一堆雜亂的東西,有若干個漢堡 若干個冰淇淋 若干個可樂。如果級別都是上萬數量的情況下,有沒有方法把他們較快的分析出來?第一步,排程員簡單的將這一...