我只有mapper类来创建用于批量加载到HBase的文件,我已经为单元测试编写了一个MRUnit。
虽然预期结果和重新结果相同,但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 :(得分:8)
因此,您的失败是MRUnit正在使用对象的equals
和hashCode
方法来比较预期输出对象和实际输出对象(在org.apache.hadoop.mrunit.TestDriver.buildPositionMap(List<Pair<K2, V2>>)
方法中使用HashMap ):
equals
和hashCode
方法equals
或hashCode
方法所以Put是造成问题的原因。解决此问题的唯一方法是手动检查驱动程序输出(使用驱动程序run
方法而不是runTest
)并将结果列表与您期望使用对象compareTo
方法进行比较(这两个类都存在)。
答案 1 :(得分:0)
我遇到了这个问题并通过设置Key和Value的比较器来解决它。以下代码为BytesWritable值。
ReduceDriver reduceDrive = ReduceDriver.newReduceDriver(<<ReducerInstance>>);
reduceDriver.setValueComparator(new Comparator<BytesWritable>(){
@Override
public int compare(BytesWritable o1, BytesWritable o2) {
return o1.compareTo(o2);
}
});