更新時間:2020年11月03日17時38分 來源:傳智播客 瀏覽次數(shù):
InputFormat主要用于描述輸入數(shù)據(jù)的格式,它提供以下兩個功能:
數(shù)據(jù)切分:按照某個策略將輸入數(shù)據(jù)切分成若干個分片(split),以便確定MapTask個數(shù)以及對應的分片(split)。
·為Mapper提供輸入數(shù)據(jù):給定某個分片(split),將其解析成一個一個的key/value鍵值對。
· Hadoop自帶了一個 InputFormat接口,該接口的定義代碼如下所示:
public abstract class InputFormat{ public abstract List getSplits(JobContext context ) throws IOException, InterruptedException; public abstract RecordReader createRecordReader(InputSplit split, TaskAttemptContext context ) throws IOException, InterruptedException; }
從上述代碼可以看出,InputFormat接口定義了getSplits()和createRecordReader()兩個方法,其中,getSplits()方法負責將文件切分為多個分片(split),createRecordReader()方法負責創(chuàng)建RecordReader對象,用來從分片中讀取數(shù)據(jù)。下面,我們主要對getSplits()方法進行介紹。
getSplits()方法主要實現(xiàn)了邏輯切片機制。其中,切片的大小splitSize是由3個值確定的,即minSize、maxSize和blockSize。
minSize:splitSize的最小值,由參數(shù)mapred.min.split.size確定,可在mapred-site.xml中進行配置,默認為1MB。
maxSize:splitSize的最大值,由參數(shù)mapreduce.jobtracker.split.metainfo.maxsize確定,可在mapred-site.xml中進行設置,默認值為10MB。
blockSize:HDFS中文件存儲塊的大小,由參數(shù)dfs.block,size確定,可在hdf-site.xml中進行修改,默認為128MB。
猜你喜歡: