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的选项大多没有记录
- 将1GB数据加载到hbase中需要1小时
- 通过JDBC连接到Hive时,Java NoSuchMethodError
- 解析大于hdfs块大小的XmlInputFormat元素
- Hadoop:java.lang.ClassCastException:org.apache.hadoop.io.LongWritable无法强制转换为org.apache.hadoop.io.Text
- 将数据复制到HDFS时createBlockOutputStream中的exception
- 如何强制Spark执行代码?
- java.lang.NoSuchFieldError:IBM_JAVA,用于Eclipse中的简单hbase Java客户端
- Spring + Maven + Hadoop
- mapreduce组合键样本 – 不显示所需的输出