最近有個任務就是處理上百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...