http://www.rigongyizu.com/mapreduce-job-one-map-process-one-file/
有一批數(shù)據(jù)用hadoop mapreduce job處理時(shí),業(yè)務(wù)特點(diǎn)要求一個(gè)文件對(duì)應(yīng)一個(gè)map來(lái)處理,如果兩個(gè)或多個(gè)map處理了同一個(gè)文件,可能會(huì)有問(wèn)題。開(kāi)始想通過(guò)設(shè)置 dfs.blocksize 或者 mapreduce.input.fileinputformat.split.minsize/maxsize 參數(shù)來(lái)控制map的個(gè)數(shù),后來(lái)想到其實(shí)不用這么復(fù)雜,在自定義的InputFormat里面直接讓文件不要進(jìn)行split就可以了。
public class CustemDocInputFormat extends TextInputFormat { |
public RecordReader<LongWritable, Text> createRecordReader(InputSplit split, TaskAttemptContext context) { |
DocRecordReader reader = null ; |
reader = new DocRecordReader(); // 自定義的reader |
} catch (IOException e) { |
protected boolean isSplitable(JobContext context, Path file) { |
這樣,輸入文件有多少個(gè),job就會(huì)啟動(dòng)多少個(gè)map了。
posted on 2014-09-16 09:28
SIMONE 閱讀(526)
評(píng)論(0) 編輯 收藏 所屬分類:
hadoop