MRUnit - 没有按预期工作

问题描述:

我只有mapper类创建了批量加载到HBase的文件,并且我为单元测试写了MRUnit。MRUnit - 没有按预期工作

虽然预期结果和retruned结果是一样的,MRUnit与消息失败“失踪预期输出”

预期输出:(4b 65 79 31, {"totalColumns":1,"families":{"default":[{"timestamp":9223372036854775807,"qualifier":"default","vlen":6}]},"row":"Key1"})

实际输出:(4b 65 79 31, {"totalColumns":1,"families":{"default":[{"timestamp":9223372036854775807,"qualifier":"default","vlen":6}]},"row":"Key1"})

我要去哪里错了? ImmutableBytesWritable或Put有问题吗?

+0

什么是Mapper输出键和值类的类型? – 2013-02-14 00:25:34

+0

什么版本的MRUnit? – 2013-02-14 00:26:18

+0

输出键类的类型:ImmutableBytesWritable ,输出值类的类型:Put .... MRUnit版本:0.9.0 – Suresh 2013-02-14 10:56:42

所以你的失败是事实,MRUnit使用对象的equalshashCode方法比较预期和实际输出对象(一个HashMap在org.apache.hadoop.mrunit.TestDriver.buildPositionMap(List<Pair<K2, V2>>)方法使用):

所以Put是导致问题的原因。唯一的方法是手动检查驱动程序输出(使用驱动程序run方法而不是runTest),并将结果列表与您期望使用对象compareTo方法(两个类都存在)进行比较。

+0

感谢您的回复:)它的工作。 – Suresh 2013-02-14 14:41:50

我有这个问题,并通过设置一个比较键和值来解决它。代码如下BytesWritable值。

ReduceDriver reduceDrive = ReduceDriver.newReduceDriver(<<ReducerInstance>>); 

    reduceDriver.setValueComparator(new Comparator<BytesWritable>(){ 
     @Override 
     public int compare(BytesWritable o1, BytesWritable o2) { 
      return o1.compareTo(o2); 
     } 
    });