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有问题吗?
所以你的失败是事实,MRUnit使用对象的equals
和hashCode
方法比较预期和实际输出对象(一个HashMap在org.apache.hadoop.mrunit.TestDriver.buildPositionMap(List<Pair<K2, V2>>)
方法使用):
-
ImmutableBytesWritable - 不实施
equals
和hashCode
方法 -
Put - 未实现
equals
或hashCode
方法
所以Put是导致问题的原因。唯一的方法是手动检查驱动程序输出(使用驱动程序run
方法而不是runTest
),并将结果列表与您期望使用对象compareTo
方法(两个类都存在)进行比较。
感谢您的回复:)它的工作。 – 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);
}
});
什么是Mapper输出键和值类的类型? – 2013-02-14 00:25:34
什么版本的MRUnit? – 2013-02-14 00:26:18
输出键类的类型:ImmutableBytesWritable ,输出值类的类型:Put .... MRUnit版本:0.9.0 – Suresh 2013-02-14 10:56:42