大資料之路 二 MapReduce流程詳細分析

2021-09-02 03:55:09 字數 2627 閱讀 1326

最近有個任務就是處理上百g的日誌檔案,為了效率我們首先想到的是用hadoop,而hadoop框架中最重要的一

部分就是mapreduce,下面個人總結下mapreduce的流程:

1、mapruduce file要處理得檔案:file儲存在hdfs上,切分成預設64m的block,儲存在多個datanode節點上

2、mapreduce inputformat:資料格式定義,例如以\n分割記錄,「空格」分割單詞

3、mapreduce split:map函式的輸入邏輯概念,乙個inputsplit和block是「1對1」或者「1對多」的關係

4、mapreduce recordreader:每讀取一條記錄,呼叫一次map函式

5、mapreduce map:執行map函式,在記憶體中增加資料

6、mapreduce shuffle:partion,sort,spill,merge, combiner,copy,memory,disk……效能優化的大

有可為的地方

6.1、partitioner:決定資料由哪個reducer進行處理(例如用hash方法)

6.2、memorybuffer:記憶體緩衝區 三元組資料形式儲存 緩衝區大小默

認100m,溢位閥值80m

6.3、spill:記憶體緩衝超過80m時,spill執行緒鎖住這80m內容,將資料寫到本地磁碟,然後釋放記憶體,

資料溢位前會先進行sort、combiner併發送到相同reduce的key資料,這樣可減少partitioner索引量

6.4、sort:緩衝區按照key進行排序

6.5、combiner:資料合併,將相同的key value值合併,combine函式其實就是reduce函式

6.6、spill to disk:溢寫到硬碟 記憶體緩衝區每次資料溢寫都會生成乙個溢寫檔案,將相同partition

的資料儲存到一塊

6.7、merge on disk:map後合併溢寫檔案

7、mapreduce map task:map任務上的輸出時按照partitiion和key排序的資料儲存檔案,一般有多個map task,

每個task有乙個輸出檔案  ...

8、mapreduce copy:將map端的輸出檔案按照相應的partition,copy到reduce端

9、mapreduce spill:和map端的spill一樣

10、mapreduce sort:以相同的key值為參照排序

11、mapreduce combiner:value值合併

12、mapreduce merge:合併溢位檔案

13、reduce函式:function reduce

附加一張官方的shuffle流程圖;

下面憑藉我自己的理解寫一下具體資料在mapreduce過程中的形式變化:

樣例資料:this is a hello hello world  

a b a 

b c b

1、資料被inputformat分隔為"this is a hello hello world",value1     "a b a ",value2  "b c b ",value3

(注:資料以split形式儲存在block中)

map開始

2、map(value1)   map(value2)  map(value3) ---------->  .....

3、partion每個,例如 讓this對reduce個數n取模得到m,則----------->

4、按照key值進行sort,例如:------->

5、combine -------->

merge   如果沒有設定上述combiner 則 ------>  

6、map輸出... ,這些資料被copy到1號reduce(因為partition的值為1)

(注:以上的輸出資料沒有經過combine)

reduce開始

7、sort--------->

8、combine  -------->

9、merge   ------>

10、reduce   ------->

即完成了乙個wordcount程式,統計出單詞個數a:2  b:3  c:1

(樣例資料第一行不具代表性,博主悄悄地把這行資料的處理忽視了......)

其實整個mapreduce流程的最最神奇的地方在shuffle,因為整個mr程式的執行效率全在這個裡面進行優化,而平時

我們僅僅是通過split或者string的連線來編寫一些簡單的map、reduce函式,殊不知得shuffle者得mapreduce,得

mapreduce者得hadoop,得hadoop者得大資料雲計算的天下......播主有點神經了......以上分析僅僅是為了梳理一

下自己對mapreduce流程的理解(其實我還是比較凌亂的),並沒有上**,以後慢慢的分析原始碼並總結吧。

(每次看這個都感觸頗深啊)

mr優化部落格:

shuffle分析部落格:

大資料之路 二 MapReduce

mapreduce是一種分布式的計算框架,mapreduce由jobtracker和tasktracker組成。jobtracker負責資源管理和作業控制,tasktracker負責任務的執行。程式會根據inputformat將輸入檔案分割成splits,每個split會作為乙個map task的輸...

大資料之Map reduce

大資料問題一般解決方式 利用雜湊函式進行分流來解決記憶體限制或者其他限制的問題。1.雜湊函式又叫雜湊函式,雜湊函式的輸入域可以是非常大的範圍,但是輸出域是固定範圍。假設為s。雜湊函式的性質 1.典型的雜湊函式都擁有無限的輸入值域。2.輸入值相同時 返回值一樣。3.輸入值不同時,返回值可能一樣,也可能...

大資料MapReduce總結

mapreduce定義 hadoop mapreduce是乙個軟體框架,基於該框架能夠容易地編寫應用程式,這些應用程式能夠執行在由上千個商用機器組成的大集群上,並以一種可靠的,具有容錯能力的方式並行地處理上tb級別的海量資料集。mapreduce主要思想 分久必合 mapreduce兩個階段 map...