hadoop mapreduce只执行一个映射器

时间:2015-10-13 11:16:43

标签: hadoop mapreduce hdfs mapper

我正在运行地图减少工作。无论文件大小(70 MB,200 MB,2.5 GB),只运行一个映射器。块大小为128MB。

任何人都可以帮忙找出原因吗?

注意

  1. 数据文件不是zip / gzip文件,而是* .dat
  2. 这不是生产环境。用户是否是低优先级用户的任何可能性?参考#11 https://cloudcelebrity.wordpress.com/2013/08/14/12-key-steps-to-keep-your-hadoop-cluster-running-strong-and-performing-optimum/
  3. 我提交作业的代码如下:

        String configPath = arg[0];
        String feedString = FileUtils.readFileToString(new File(configPath), StandardCharsets.UTF_8.name());
        getConf().set(Constants.FEED_CONFIG_STRING, feedString);
        getConf().set("mapred.reduce.tasks.speculative.execution", "false");
    
        Job job = new Job(conf);
        Feed feed = XMLFeedConfig.getFeed(feedString);
        job.setJarByClass(DataValidationJob.class);
        job.setJobName("Job " + feed.getName());
    
        ValidatorInputFormat.setInputPaths(job, new Path(feed.getSrc_location()));
        FileOutputFormat.setOutputPath(job, new Path(feed.getDest_location()));
    
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(Text.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(Text.class);
    
        job.setMapperClass(ValidatorMapper.class);
        job.setReducerClass(ValidatorReducer.class);
        LazyOutputFormat.setOutputFormatClass(job, TextOutputFormat.class);
        job.setNumReduceTasks(1);
    
        job.setInputFormatClass(ValidatorInputFormat.class);
        // job.setOutputFormatClass(TextOutputFormat.class);
    
        return job.waitForCompletion(true) ? 0 : 1;
    

1 个答案:

答案 0 :(得分:1)

我的问题已经解决了。基本上我们已经实现了FileInputFormat,其中我们已经覆盖了isSplittable方法,并使得输入不可拆分,如下所示:

@Override
protected boolean isSplitable(JobContext context, Path filename) {
    return false;
}

默认情况下isSplittable方法实现返回true;