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個步...