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
          主站蜘蛛池模板: 泸定县| 宁安市| 英山县| 广水市| 茂名市| 循化| 婺源县| 德阳市| 六枝特区| 盈江县| 南京市| 米脂县| 博兴县| 历史| 郯城县| 商城县| 榆中县| 满洲里市| 舒城县| 新丰县| 清丰县| 廊坊市| 湖口县| 镇远县| 定结县| 玛曲县| 克拉玛依市| 海口市| 舒城县| 徐闻县| 麦盖提县| 开原市| 翼城县| 太谷县| 永胜县| 临夏市| 剑河县| 钦州市| 东海县| 观塘区| 九寨沟县|