詳解MapReduce過程

2021-10-07 18:10:55 字數 2448 閱讀 8630

textinputformat的原始碼注釋為:

檢視inputformat介面的原始碼注釋我們了解到這個介面的作用為:

在inputformat的源**中有如下兩個方法:

inputsplit[

]getsplits

(jobconf job,

int numsplits)

throws ioexception;

//獲取recordreader

recordreader

getrecordreader

(inputsplit split,

jobconf job,

reporter reporter)

throws ioexception;

追蹤fileinputformat介面,切片方法如下:

/** splits files returned by  when they're too big.*/

public inputsplit[

]getsplits

(jobconf job,

int numsplits)

throws ioexception

totalsize += file.

getlen()

;}//預設切片是block大小(128m)如果自己定義了切片的大小就按照設定引數來,所有檔案大小/切片數-->就可以求得目標切片大小

long goalsize = totalsize /

(numsplits ==0?

1: numsplits)

;//最小的切片大小只要不動配置檔案引數預設是1,如果按設定了就按設定引數來

long minsize = math.

max(job.

getlong

(org.apache.hadoop.mapreduce.lib.input.fileinputformat.split_minsize,1)

, minsplitsize)

;// 生成切片步驟

//準備乙個檔案切片的集合-->需要去看看檔案切片的機制

arraylist

splits =

newarraylist

(numsplits)

; networktopology clustermap =

newnetworktopology()

;//網路拓撲,這個先不管

for(filestatus file: files)

elseif(

issplitable

(fs, path))if

(bytesremaining !=0)

}else

}else

} sw.

stop()

;if(log.

isdebugenabled()

)//將集合轉為陣列

return splits.

toarray

(new

filesplit

[splits.

size()

]);}

追蹤recordreader介面,發現其功能為:

追蹤inputsplit抽象類,檢視注釋發現其功能為:

2.通常,它在輸入上呈現乙個面向位元組的檢視,recordreader負責處理這個檢視並呈現乙個面向記錄的檢視

因此我們知道這裡切片只是乙個邏輯劃分,記錄了一些切片資訊

資料切片只是在邏輯上對輸入資料進行分片,並不會在磁碟上將其切分成分片進行儲存。

inputsplit 只記錄了分片的元資料資訊,比如起始位置、長度 以及所在的節點列表等

在map task的read階段接受輸入分片,根據recordreader按照inputsplit 記錄 的位置資訊讀取資料,會將乙個分片處理成一行一行的資料即乙個鍵值對鍵為行偏移量,值為文字資料

'shuffle是mapreduce處理流程中的乙個過程,他的每乙個處理步驟是分散在各個map任務和reduce任務上完成的.整體看,有三個操作'

1)分割槽

2)sort根據key排序

3)combiner進行區域性合併

注意:reduce task 的數量的決定是可以直接手動設定的並不一定和map task 數量相等,預設是1

如果分割槽數不是 1,但是 reducetask 為 1,是不執行分割槽操作的(執行分割槽之前會進行判斷)

MapReduce過程詳解

1.輸入分片 input split 在進行map計算之前,mapreduce會根據輸入檔案計算輸入分片 input split 每個輸入分片 input split 針對乙個map任務。2.map階段 就是我們寫的map函式,map函式效率相對好控制,而且一般map操作都是本地化操作也就是在資料儲...

MapReduce過程詳解

資料執行的底層目前還是以hadoop為主,我們主要接觸的還是上層抽象出來的比較方便的資料工具,例如hive,spark,impala等等,那麼hadoop底層的核心原理又是什麼呢?hadoop的底層核心由hdfs,mapreduce和yarn組成,hdfs是大資料的儲存引擎,分布式檔案系統,yarn...

MapReduce 過程詳解

1 最簡單的過程 map reduce map partition reduce 3 增加了在本地先進性一次reduce 本地優化 減少後期網路的傳輸量 map combine 本地reduce partition reduce 一般說來,乙個完整的mapreduce過程可以分為以上3中提到的4個步...