mrunit-未按预期工作

a5g8bdjr  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(462)

我只有mapper类可以创建文件以便批量加载到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有问题吗?

iklwldmw

iklwldmw1#

所以你的失败是mrunit使用 equals 以及 hashCode 用于比较预期输出对象和实际输出对象的对象的方法(在 org.apache.hadoop.mrunit.TestDriver.buildPositionMap(List<Pair<K2, V2>>) 方法):
immutablebyteswritable-实现 equals 以及 hashCode 方法
put-不实现 equals 或者 hashCode 方法
所以问题的根源就是看跌期权。解决这个问题的唯一方法是手动检查驱动程序输出(使用驱动程序 run 方法而不是 runTest )并将结果列表与使用对象所期望的结果进行比较 compareTo 方法(这两个类都存在)。

wswtfjt7

wswtfjt72#

我遇到了这个问题,并通过为key和value设置一个比较器来解决它。下面是字节可写值的代码。

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

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

相关问题