posts - 495,comments - 227,trackbacks - 0

          http://www.rigongyizu.com/mapreduce-job-one-map-process-one-file/

          有一批數據用hadoop mapreduce job處理時,業務特點要求一個文件對應一個map來處理,如果兩個或多個map處理了同一個文件,可能會有問題。開始想通過設置 dfs.blocksize 或者 mapreduce.input.fileinputformat.split.minsize/maxsize 參數來控制map的個數,后來想到其實不用這么復雜,在自定義的InputFormat里面直接讓文件不要進行split就可以了。

          public class CustemDocInputFormat extends TextInputFormat {
           
              @Override
              public RecordReader<LongWritable, Text> createRecordReader(InputSplit split, TaskAttemptContext context) {
                  DocRecordReader reader = null;
                  try {
                      reader = new DocRecordReader(); // 自定義的reader
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
                  return reader;
              }
           
              @Override
              protected boolean isSplitable(JobContext context, Path file) {
                  return false;
              }
          }

          這樣,輸入文件有多少個,job就會啟動多少個map了。

          posted on 2014-09-16 09:28 SIMONE 閱讀(529) 評論(0)  編輯  收藏 所屬分類: hadoop
          主站蜘蛛池模板: 天柱县| 华容县| 永安市| 兴海县| 花垣县| 湖北省| 南宫市| 博野县| 诏安县| 西充县| 巴南区| 永年县| 通河县| 富宁县| 建水县| 松潘县| 南华县| 高阳县| 泗阳县| 舟山市| 荥阳市| 淮安市| 北宁市| 新河县| 巴塘县| 巴彦县| 尼勒克县| 瓮安县| 昆山市| 台东县| 仁怀市| 平远县| 二连浩特市| 延长县| 衢州市| 察哈| 修水县| 景洪市| 略阳县| 瓦房店市| 长阳|