MRUnit с HBase и MapReduce получает ошибку при сериализации

Я пытаюсь протестировать свой MapReduce с помощью MRUnit, когда я выполняю интеграционный тест, он работает. У меня есть модульный тест, который я тоже хочу пройти.

Мой драйвер MRUnit и класс MapReduce:

MapDriver<ImmutableBytesWritable, Result, ImmutableBytesWritable, KeyValue>

public final class HashMapper extends
    TableMapper<ImmutableBytesWritable, KeyValue> 

Когда я определяю ввод, я получаю сообщение об ошибке:

mapDriver.withInput(new ImmutableBytesWritable(Bytes
                .toBytes("query")), new Result(kvs1));

java.lang.NullPointerException
    at org.apache.hadoop.mrunit.internal.io.Serialization.copy(Serialization.java:73)
    at org.apache.hadoop.mrunit.internal.io.Serialization.copy(Serialization.java:91)
    at org.apache.hadoop.mrunit.internal.output.MockOutputCollector.collect(MockOutputCollector.java:48)
    at org.apache.hadoop.mrunit.internal.mapreduce.AbstractMockContextWrapper$4.answer(AbstractMockContextWrapper.java:90)
    at org.mockito.internal.stubbing.StubbedInvocationMatcher.answer(StubbedInvocationMatcher.java:29)
    at org.mockito.internal.MockHandler.handle(MockHandler.java:95)
    at org.mockito.internal.creation.MethodInterceptorFilter.intercept(MethodInterceptorFilter.java:47)

Я предполагаю, что это потому, что ему не нравятся объекты Result и KeyValue, поскольку они не доступны для записи, но я не понимаю, почему тогда работают интеграционные тесты. Раньше он работал с Hbase 0.94, когда все эти объекты реализуют Writable, теперь я работаю с HBase 0.96. Любая подсказка, как я должен использовать MRUnit здесь?


person Guille    schedule 20.03.2014    source источник


Ответы (1)


В версии HBase 0.96 некоторые классы больше не реализуются с возможностью записи, но люди из HBase создали для них новые классы сериализации.

Итак, решение состоит в том, чтобы указать в Конфигурации, какие классы MRUnit должен использовать:

Свойство называется io.serializations. Существуют следующие сериализации:

Класс результатов org.apache.hadoop.hbase.mapreduce.ResultSerialization Класс KeyValue org.apache.hadoop.hbase.mapreduce.KeyValueSerialization Классы Put & Get org.apache.hadoop.hbase.mapreduce.MutationSerialization

person Guille    schedule 21.03.2014
comment
+1 Но я не думаю, что для Put and Get реализована сериализация. org.apache.hadoop.hbase.mapreduce.ResultSerialization реализует класс Result, а org.apache.hadoop.hbase.mapreduce.KeyValueSerialization реализует KeyValue - person sethi; 11.08.2014
comment
Не обращайте внимания на комментарий выше, форматирование меня смутило. Позже я понял, что вы хотите сказать, что MutationSerialization реализует сериализацию для Put/Get. - person sethi; 11.08.2014