3

我只有创建用于批量加载到 HBase 的文件的映射器类,并且我已经编写了一个用于单元测试的 MRUnit。

尽管预期结果和重新生成的结果相同,但 MRUnit 失败并显示消息 "Missing expected output"

预期输出:(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 有问题吗?

4

2 回答 2

9

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

所以看跌期权是导致问题的原因。解决此问题的唯一方法是手动检查驱动程序输出(使用驱动程序run方法而不是runTest),并将结果 List 与使用 objectscompareTo方法(这两个类都存在)的预期结果进行比较。

于 2013-02-14T12:48:37.687 回答
0

我遇到了这个问题并通过为键和值设置一个比较器来解决它。下面的代码用于 BytesWritable 值。

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

    reduceDriver.setValueComparator(new Comparator<BytesWritable>(){
        @Override
        public int compare(BytesWritable o1, BytesWritable o2) {
            return o1.compareTo(o2);
        }
    });
于 2016-01-07T06:36:17.240 回答