нулевой буфер в ReadFields () в редукторе для сложных типов - PullRequest
1 голос
/ 06 мая 2011

Я пытаюсь передать сложную запись между маппером и редуктором, точнее ArrayWritable of ObjectWritables.

public class ObjectArrayWritable extends ArrayWritable {
    public ObjectArrayWritable() {
        super(ObjectWritable.class);
    }
}

Мой картограф: Mapper<LongWritable, Text, Text, ObjectArrayWritable>

Мой редуктор: Reducer<Text,ObjectArrayWritable,Text,ObjectArrayWritable>

Редуктор падает на метод readfields() интерфейса с возможностью записи и выдает следующее исключение:

java.lang.NullPointerException
    at org.apache.hadoop.io.ObjectWritable.readObject(ObjectWritable.java:183)
    at org.apache.hadoop.io.ObjectWritable.readFields(ObjectWritable.java:66)
    at org.apache.hadoop.io.ArrayWritable.readFields(ArrayWritable.java:90)
    at org.apache.hadoop.io.serializer.WritableSerialization$WritableDeserializer.deserialize(WritableSerialization.java:67)
    at org.apache.hadoop.io.serializer.WritableSerialization$WritableDeserializer.deserialize(WritableSerialization.java:40)
    at org.apache.hadoop.mapreduce.ReduceContext.nextKeyValue(ReduceContext.java:116)
    at org.apache.hadoop.mapreduce.ReduceContext.nextKey(ReduceContext.java:92)
    at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:175)
    at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:566)
    at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:408)
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:216)

Когда я попытался реализовать свой собственный режим записи и отладки, я заметил, что буфер DataInput в readfields(DataInput data) получен нулевым.

Обратите внимание, что моя ошибка похожа на: hadoop + Интерфейс с возможностью записи + readFields создает исключение в редукторе , но очистка объекта не помогла ..

Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 29 июля 2011

Я не думаю, что вы обрабатываете случай, когда в ObjectArrayWritable ничего нет. Я не уверен, так как код не указан.

...