3

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 に問題がありますか?

4

2 に答える 2

9

したがって、失敗は、MRUnit がオブジェクトのequalsandhashCodeメソッドを使用して、予想される出力オブジェクトと実際の出力オブジェクトを比較しているという事実です ( org.apache.hadoop.mrunit.TestDriver.buildPositionMap(List<Pair<K2, V2>>)メソッドで HashMap が使用されます)。

  • ImmutableBytesWritableequals - andhashCodeメソッドを実装する
  • Putequals - orhashCodeメソッドを実装しません

したがって、Put が問題の原因です。runこれを回避する唯一の方法は、ドライバーの出力を手動でチェックし (ではなくドライバーメソッドを使用)、オブジェクトメソッド (両方のクラスに存在します)runTestを使用して、結果のリストを期待するものと比較することです。compareTo

于 2013-02-14T12:48:37.687 に答える