hadoop mapreduce 只执行一个mapper

标签 hadoop mapreduce hdfs mapper

我正在运行 map reduce 作业。无论文件大小(70 MB、200 MB、2.5 GB),都只运行一个映射器。 block 大小为 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/

.

我提交作业的代码如下:

    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;

最佳答案

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

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

默认实现isSplittable方法返回true;

关于hadoop mapreduce 只执行一个mapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33101245/

相关文章:

hadoop - 分别在AWS上为mapper和reducer指定VM设置

hadoop - 配置单元错误:任务已被ExecutorService拒绝

join - Map-side 加入 Hadoop Streaming

hadoop - Hadoop MapReduce无法产生所需的输出

hadoop - 如何在Java代码中获得HDFS可用空间?

Hadoop Streaming - 外部映射器脚本 - 找不到文件

hadoop - 被 ApplicationMaster 退出代码杀死的容器是 143

java - Hadoop:在连续的 mapreduce 任务之间传递数据

hadoop - Hadoop:错误BlockSender.sendChunks()异常

hadoop - FSDataOutputStream.writeUTF() 在 hdfs 数据的开头添加额外的字符。如何避免这些额外的数据?