前言:
在MapReduce中Map的數(shù)量與InputSplit數(shù)量相等瓣履,想要改變一個(gè)job的Map任務(wù)數(shù)要從InputSplit的數(shù)目和大小出發(fā),而InputSplit是由InputFormat生成的践图,兩者的關(guān)系如下圖:
ref:https://data-flair.training/blogs/inputsplit-in-hadoop-mapreduce/
InputSplit
- InputSplit包含一個(gè)以字節(jié)為單位的長(zhǎng)度和一組存儲(chǔ)位置(一組主機(jī)名)叹誉。
- 一個(gè)InputSplit由一個(gè)Map任務(wù)來(lái)處理霎俩。
- InputSplit并不包含數(shù)據(jù)本身袭厂,而是指向數(shù)據(jù)的引用剑刑。
- InputSplit是由記錄(record媳纬,key-value pair)組成。
MapReuce應(yīng)用開(kāi)發(fā)人員不必直接處理InputSplit施掏,因?yàn)樗怯蒊nputFormat創(chuàng)建的钮惠,InputFormat負(fù)責(zé)創(chuàng)建輸入分片并將它們分割成記錄
InputFormat
InputFormat類(lèi)負(fù)責(zé)將存儲(chǔ)在HDFS上的不同格式的輸入文件調(diào)用getSplits()
分割成InputSplit,并且提供了用于Map()函數(shù)讀取記錄的createRecordReader()
方法七芭;
-
InputFormat的類(lèi)型
ref:https://data-flair.training/blogs/hadoop-inputformat/ FileInputFormat
如何設(shè)置分片大兴赝臁?
影響分片大小的屬性有:
mapreduce.input.fileinputformat.split.minsize
mapreduce.input.fileinputformat.split.maxsize
dfs.blocksize
分片大小的計(jì)算公式為:
max(minimumSize, min(maximumSize, blockSize))
在默認(rèn)情況下:
minimumSize < blockSize < maximumSize
狸驳,因此默認(rèn)情況下分片大小就是文件塊大小