2014-11-07 4 views
1

У меня есть программа mapreduce с только картографом и без набора редукторов. Я хочу проверить это. я имею ниже тестовый кодКак проверить Mapper, который испускает ключ как null, т. Е. Context.write (null, <somevalue>);

@Test 
    public void testMapper() throws IOException { 

     mapDriver.withInput(new LongWritable(0l), new Text(
       "af00bac654249b9d27982f19064338f4,54.0258822077885,-1.56832133466378,20121022,105507,026542913532,2093,87")); 
     mapDriver.withOutput(null, [some value]); 
     mapDriver.runTest(); 
    } 

с вызовом mapDriver.withOutput (NULL, [некоторое значение]); эта линия она бросает ниже исключением

java.lang.NullPointerException на org.apache.hadoop.mrunit.internal.io.Serialization.copy (Serialization.java:58) на org.apache.hadoop.mrunit. internal.io.Serialization.copy (Serialization.java:91) в org.apache.hadoop.mrunit.internal.io.Serialization.copyWithConf (Serialization.java:104)

Note: Mapper Generic Signature Mapper<LongWritable, Text, Void, GenericRecord> 

Может кто-нибудь пожалуйста, дайте мне знаете, как написать тестовые сценарии для картографа, которые испускают нуль?

если я делать Nullwritable.get тогда я получаю исключение, как показано ниже java.lang.NullPointerException в org.apache.hadoop.mrunit.internal.io.Serialization.copy (Serialization.java:73) в орг .apache.hadoop.mrunit.internal.io.Serialization.copy (Serialization.java:91) at org.apache.hadoop.mrunit.internal.io.Serialization.copyWithConf (Serialization.java:104) at org.apache .hadoop.mrunit.TestDriver.copy (TestDriver.java:608) на org.apache.hadoop.mrunit.TestDriver.copyPair (TestDriver.java:612) на org.apache.hadoop.mrunit.TestDriver.addOutput (TestDriver .java: 118) at org.apache.hadoop.mrunit.TestDriver.withOutput (TestDriver.ja ва: 138) в com.gfk.gxl.etl.common.ExtractCSVTest.testMapper (ExtractCSVTest.java:73) на sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)

это больше похоже MRUnit with Avro NullPointerException in Serialization однако ответ не решает мою проблему

метод
with few more research i have below update 
    class org.apache.avro.generic.GenericData$Record is not able to get serializer and deserializer 
    in org.apache.hadoop.mrunit.internal.io.Serialization and both are coming as null which is causing the null pointer exception 



From API code snippet for org.apache.hadoop.mrunit.internal.io.Serialization starting at line  no 61 to 70 

    try { 
     serializer = (Serializer<Object>) serializationFactory 
      .getSerializer(clazz); 
     deserializer = (Deserializer<Object>) serializationFactory 
      .getDeserializer(clazz); 
    } catch (NullPointerException e) { 
     throw new IllegalStateException(
      "No applicable class implementing Serialization in conf at io.serializations for " 
       + orig.getClass(), e); 
    } 
above method serializer \ deserializer are coming null . do we have some way to avoid it 

ответ

2

Использование NullWritable.get() insted.Hope это помогает.

+0

обновления моего комментарий после того, как это делать. – Sam

+0

Примечание: Mapper Generic Signature Mapper можете ли вы указать, что представляет собой значение пустоты здесь. –

+0

Вы решили проблему? Я получаю эту проблему точно так же, как вы сейчас, мой картограф похож на Mapper soulmachine

0

К сожалению, хотя Hadoop может принимать нулевые ключи, вы не можете использовать пустые ключи в MRUnit на данный момент, команда MRUnit планирует поддержать нулевые ключи в будущем, смотрите здесь allow null keys and values as output, expected output