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

我正在尝试实现一个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为每一行文本创建了一个映射器,它们似乎按顺序运行,如果单个文件失败,则作业失败。

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

我做错了什么?

我假设您使用的是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配置有时是一个真正的痛苦,没有正确记录,我观察到配置参数有时会在版本之间不断变化。 最好的办法是在不确定某些配置参数时查看代码。

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

其次你可以查看这个链接 :(要粘贴重要部分)

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

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

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

新api的选项大多没有记录