hadoop - Output.collect mapreduce 似乎没有取正确的值?

标签 hadoop mapreduce

我是 Hadoop 的新手,两天来我一直在努力弄清楚为什么 output.collect 没有收集正确的值。

我自己解释一下:事实上,(为了简化起见)我有以下映射方法:

  public
      void
      map(LongWritable key, Text value, OutputCollector<Text, MyObject> output, Reporter reporter)
                                                                                                                 throws IOException {

try {

  ForXmlHandling message = (ForXmlHandling) unmarshaller.unmarshal(new StringReader(value.toString()));

  MyObject row = XmlParser.parse(message);

   row.setOrigin(true);
  output.collect(new Text(row.getPnrRecordKey().toString()), row);
  }

catch(JAXBException e) {
   LOG.debug(e);
}

MyObject 是我创建的对象:

  public class MyObject  {

  private boolean                   original;
  private boolean                   split;
  ....

  }

事实上,当我在 Debug模式下仅启动映射器时,即使我将行 (MyObject) 的 origin 属性设置为 true,映射器 (output.collect) 的输出始终是行origin 属性设置为 false( bool 值的默认值)。我不明白 output.collect 有什么问题。

我们非常欢迎任何帮助。谢谢!

最佳答案

感谢马特的回答!确实,问题出在 readFields 的实现上,因为我没有调用 write:

//write
_original.write(out);
_split.write(out);


//readFields
_original = new BooleanWritable();
_split = new BooleanWritable();

_original.readFields(in);
_split.readFields(in);

关于hadoop - Output.collect mapreduce 似乎没有取正确的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31319669/

相关文章:

hadoop - 关于hbase,zookeeper.MetaTableLocator:无法验证hbase:meta,.NotServingRegionException

hadoop - 使用 Pig 计算两列之间的平均值

java - TotalOrderPartitioner 和分区文件

hadoop - Hadoop Map Reduce 链接中的数据共享

java - Hadoop Java 与 C/C++ 在 CPU 密集型任务上的对比

hadoop - MapReduce作业在HADOOP-2.6.0中不起作用

hadoop - MultipleOutputFormat在Reduce步骤中仅执行一次迭代

hadoop - 谷歌云 Spanner java.lang.IllegalArgumentException : Jetty ALPN/NPN has not been properly configured

java - 配置单元顶点失败 : killed/failed due to:ROOT_INPUT_INIT_FAILURE Caused by: java. lang.NullPointerException

Hadoop 2.7.1 - 映射减少错误 : Diagnostics: Exception from container-launch