MRUnit - 未按预期工作

时间:2013-02-13 10:46:38

标签: hadoop hbase mrunit

我只有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?

的问题

2 个答案:

答案 0 :(得分:8)

因此,您的失败是MRUnit正在使用对象的equalshashCode方法来比较预期输出对象和实际输出对象(在org.apache.hadoop.mrunit.TestDriver.buildPositionMap(List<Pair<K2, V2>>)方法中使用HashMap ):

所以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);
        }
    });