MapReduce的工作原理及實現案例

2021-10-10 14:01:41 字數 2131 閱讀 8361

在map之前,根據輸入檔案建立inputsplit

➢輸入分片儲存的是分片長度和記錄資料位置的陣列

block和split的區別

1、block是資料的物理表示

2、split是塊中資料的邏輯表示

3、split劃分是在記錄的邊界處

4、split的數量應不大於block的數量(一般相等)

maptask並行度由客戶端提交job時的切片個數決定

maptask工作機制:read讀取階段->map處理階段->collect收集階段->spill溢寫階段->combine階段

*reducetask的數量可以直接手動設定:job.setnumreducetasks(num);

1、reducetask=0 ,表示沒有 reduce 階段,輸出檔案個數和 map 個數一致

2、reducetask 預設值就是 1,所以輸出檔案個數為乙個

3、如果資料分布不均勻,就有可能在 reduce 階段產生資料傾斜

4、如果分割槽數不是1,但是reducetask為1,不執行分割槽過程

*reducetask工作機制:copy階段->merge階段->sort階段->reduce階段

1、client向resourcemanager提交任務申請,rm找到nodemanager並啟動乙個

和reducetask;

2、在maptask上讀取檔案,由textinputformat指定讀取規則,呼叫recordreader

方法按行讀取,將行號和每行資料組成檔案塊進行返回,返回的longwritable和text

3、每次獲取的行的偏移量和每一行內容通過map()方法進行邏輯運算形成新的鍵值

對,通過context物件寫到outputcollector中;

4、outputcollector把收集到的鍵值對傳送到環形緩衝區,就進入了shuffle過程.

環形緩衝區的預設大小為100m,當資料累計到其大小的80%,就會觸發溢位;

5、spill溢位前是需要對資料進行分割槽和排序的,如果沒有設定分割槽器,就會呼叫系統

預設的分割槽方法,對環形緩衝區的每個鍵值對hash乙個partition值,相同值得分為同

乙個區,分割槽數跟numreducetasks相關。然後再對key值進行公升序排序;

6、環形緩衝區中分割槽排序後的資料溢位到檔案中,如果map階段處理的資料量較大,

則會溢位多個小檔案。如果設定了combiner,相同key的value值相加,當處理資料量

較大時,目的是讓盡可能少的資料寫入到磁碟,提高執行效率,否則檔案中將存在多個

相同的key;

7、多個溢位的小檔案會被歸併排序為乙個大檔案,大檔案中的資料仍然是分割槽且分

區有序的;

區號去每個不同的map task節點上去取相同分割槽的資料,然後將取過來的資料在進行

merge合併成乙個大檔案,大檔案是按照k有序的,此時,shuffle過程結束;

9、在reduce task運算過程中,首先呼叫groupingcomparator對大檔案的資料進行

分組,每次取出一組鍵值,通過自定義的reduce()方法進行邏輯處理,然後根據

outputformat指定的輸出格式將資料寫到hdfs檔案中。輸出檔案的個數與reduce

個數一致。

public

class

extends }}

public

class

wordreducer

extends

reducer

count.

set(sum)

; context.

write

(key,count);}

}

public

class

wordtest

}

Mapreduce工作原理及流程

乙個mapreduce作業在hado上執行的整個過程可以分為4個實體 1 客戶端,提交mapreduce作業 在客戶端上使用runjob 方法來新建jobclient例項和呼叫它的submitjob 方法。提交作業後,runjob將每秒輪詢作業的進度,如果發現與上乙個記錄不同,便把報告顯示到控制台。...

MapReduce工作原理

本文的目錄 1.mapreduce作業執行流程 2.map reduce任務中shuffle和排序的過程 mapreduce作業詳細的執行流程 流程分析 1.在客戶端啟動乙個作業。2.向jobtracker請求乙個job id。3.將執行作業所需要的資源檔案複製到hdfs上,包括mapreduce程...

map reduce工作原理

下面的圖來自南京大學計算機系黃宜華老師開設的mapreduce課程的課件,這裡稍作整理和 總結。本文旨在對接觸了mapreduce之後,但是對mapreduce的工作流程仍不是很清楚的人員,當然包括博主自己,希望與大家一起學習。mapreduce借鑑了函式式程式語言lisp中的思想,lisp lis...