我只有映射器类可以创建用于批量加载到 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 有问题吗?

最佳答案

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

  • ImmutableBytesWritable - 是否实现了 equalshashCode 方法
  • Put - 不实现 equalshashCode 方法

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

    关于hadoop - MRUnit - 未按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14851733/

    10-12 05:00