带有HBase和MapReduce的MRUnit在序列化时出错

带有HBase和MapReduce的MRUnit在序列化时出错,mapreduce,hbase,mrunit,Mapreduce,Hbase,Mrunit,我正在尝试用MRUnit测试我的MapReduce,当我做集成测试时,它工作正常。我有一些单元测试,我也想通过它们 我的MRUnit驱动程序和MapReduce类是: MapDriver<ImmutableBytesWritable, Result, ImmutableBytesWritable, KeyValue> public final class HashMapper extends TableMapper<ImmutableBytesWritable, Ke

我正在尝试用MRUnit测试我的MapReduce,当我做集成测试时,它工作正常。我有一些单元测试,我也想通过它们

我的MRUnit驱动程序和MapReduce类是:

MapDriver<ImmutableBytesWritable, Result, ImmutableBytesWritable, KeyValue>

public final class HashMapper extends
    TableMapper<ImmutableBytesWritable, KeyValue> 

我猜这是因为它不喜欢Result和KeyValue对象,因为它们是不可写的,但我不理解为什么集成测试会起作用。以前使用Hbase 0.94时,所有这些对象都实现了可写,现在我使用Hbase 0.96。有没有关于我应该如何在这里使用MRUnit的线索?

在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

+1但我认为Put&Get没有实现序列化。org.apache.hadoop.hbase.mapreduce.ResultSerialization实现结果类和org.apache.hadoop.hbase.mapreduce.KeyValueSerialization实现keyValue忽略上面的注释格式使我感到困惑。后来,我意识到您的意思是告诉MutationSerialization为Put/Get实现序列化
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)