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

3
我将尝试实现一个MapReduce任务,每个mapper将处理文本文件中的150行,并且所有mapper将同时运行;此外,无论有多少个map任务失败,它都不应该失败。
以下是配置部分:
        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为每一行文本创建一个mapper,它们似乎是依次运行的,如果其中一个失败,整个任务就会失败。
由此我推断出,我应用的设置没有任何效果。
我做错了什么?
4个回答

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配置有时真的很麻烦,文档不够详细,我观察到配置参数有时也会在发布之间发生变化。当对某些配置参数不确定时,最好查看代码。

感谢回复。迫不及待地等待0.21版本的发布!) - Arsen Zahray
0.21版本已经发布,但并不稳定。Hadoop正在讨论发布0.22和0.23版本,其中一些很好的功能将在明年发布。我不知道0.20用户的迁移路径。也许您可以提出一个单独的查询,了解0.20用户的迁移路径。 - Praveen Sripati
我现在遇到了另一个问题。我正在编写一个索引应用程序。映射器发送请求,并且大部分时间都在等待响应。此时,Hadoop每台机器仅执行2个映射器。我相信这会严重拖慢应用程序的速度。我该如何告诉它并行运行至少100个映射器? - Arsen Zahray
打开另一个查询,提供更多细节 :) - Praveen Sripati
http://stackoverflow.com/questions/7471289/how-to-tell-mapreduce-how-many-mappers-to-use-at-the-same-time - Arsen Zahray

1

1

首先,“mapred.”是旧的API,“mapreduce.”是新的API。因此,最好不要将它们一起使用。检查您正在使用哪个版本,并坚持使用该版本。另外,请重新检查您的导入,因为还有2个NLineInputFormat(mapred和mapreduce)。

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

NLineInputFormat将N行输入拆分为一个拆分。因此,每个映射 获取N行。

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


嘿,Hadoop 0.20的新API不包含NLineInputFormat,并且我可以使用的任何集群中都没有安装0.21。我不想将N行作为键。我希望从文本文件中随机选择150行,并按顺序调用映射函数。 - Arsen Zahray
你需要确保不要同时使用旧的和新的API,因为这真的会使事情混乱。从你的配置中我可以看出你正在混合使用它们。根据你使用的API,使用 "mapred.line.input.format.linespermap" 或 "mapreduce.map.failures.maxpercent"。在导入和配置中都坚持使用 "mapred" 或 "mapreduce"。 - frail

0

新的API选项大多没有文档记录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接