Hadoop选项没有任何效果(mapreduce.input.lineinputformat.linespermap,mapred.max.map.failures.percent)

时间:2011-09-17 19:36:19

标签: java hadoop mapreduce

我正在尝试实现一个MapReduce作业,其中每个映射器将占用150行文本文件,并且所有映射器将同步运行;此外,无论有多少地图任务失败,它都不会失败。

这是配置部分:

        JobConf conf = new JobConf(Main.class);
        conf.setJobName("My mapreduce");

        conf.set("mapreduce.input.lineinputformat.linespermap", "150");
        conf.set("mapred.max.map.failures.percent","100");

        conf.setInputFormat(NLineInputFormat.class);

        FileInputFormat.addInputPath(conf, new Path(args[0]));
        FileOutputFormat.setOutputPath(conf, new Path(args[1]));

问题是hadoop为每一行文本创建一个映射器,它们似乎按顺序运行,如果一个失败,则作业失败。

据此我推断,我所应用的设置没有任何效果。

我做错了什么?

4 个答案:

答案 0 :(得分:3)

我假设您使用的是Hadoop 0.20。在0.20中,配置参数是“mapred.line.input.format.linespermap”,您使用的是“mapreduce.input.lineinputformat.linespermap”。如果未设置配置参数,则默认为1,因此您将看到查询中提到的行为。

以下是0.20 NLineInputFormat。

的代码片段
  

public void configure(JobConf conf){N = conf.getInt(“mapred.line.input.format.linespermap”,1); }

Hadoop配置有时是一个真正的痛苦,没有正确记录,我观察到配置参数有时会在版本之间不断变化。最好的办法是在不确定某些配置参数时查看代码。

答案 1 :(得分:1)

从“mapred。”开始是旧的api,“mapreduce。”是新api。所以你最好不要一起使用它们。检查您正在使用的版本并坚持使用。并且还要重新检查您的导入,因为有2个NLineInputFormat以及(mapred和mapreduce)。

其次,您可以查看link :(要粘贴重要部分)

NLineInputFormat将N行输入分割为一个分割。所以,每张地图 获得N行。

但是RecordReader仍然是LineRecordReader,它读取一行 时间,因此Key是文件中的偏移量,Value是行。 如果你想要N行作为键,你可以覆盖LineRecordReader。

答案 2 :(得分:1)

如果您想快速找到hadoop新api选项的正确名称,请使用以下链接:http://pydoop.sourceforge.net/docs/examples/intro.html#hadoop-0-21-0-notes

答案 3 :(得分:0)

新api的选项大多没有记录