2017-10-17 2 views
1

Kryo 시리얼 라이저를 사용하는 Spark (v1.6.1) 응용 프로그램의 Kafka에서 protobuf 객체를 받았습니다. ProtoBuf 필드의 컬렉션에서 Kryo Serialization 문제가 발생했습니다.

org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 18.0 failed 4 times, most recent failure: Lost task 1.3 in stage 18.0 com.esotericsoftware.kryo.KryoException: java.lang.UnsupportedOperationException 
    Serialization trace: 
    aList_ (...packageName/...protoBufObject$A) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.read(FieldSerializer.java:626) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:221) 
    at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:729) 
    at org.apache.spark.serializer.KryoDeserializationStream.readObject(KryoSerializer.scala:228) 
    at org.apache.spark.serializer.DeserializationStream.readValue(Serializer.scala:171) 
    at org.apache.spark.serializer.DeserializationStream$$anon$2.getNext(Serializer.scala:201) 
    at org.apache.spark.serializer.DeserializationStream$$anon$2.getNext(Serializer.scala:198) 
    at org.apache.spark.util.NextIterator.hasNext(NextIterator.scala:73) 
    at scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:371) 
    at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:327) 
    at org.apache.spark.util.CompletionIterator.hasNext(CompletionIterator.scala:32) 
    at org.apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:39) 
    at org.apache.spark.util.collection.ExternalAppendOnlyMap.insertAll(ExternalAppendOnlyMap.scala:152) 
    at org.apache.spark.Aggregator.combineCombinersByKey(Aggregator.scala:58) 
    at org.apache.spark.shuffle.BlockStoreShuffleReader.read(BlockStoreShuffleReader.scala:83) 
    at org.apache.spark.rdd.ShuffledRDD.compute(ShuffledRDD.scala:98) 
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:306) 
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:270) 
    at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) 
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:306) 
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:270) 
    at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:73) 
    at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:41) 
    at org.apache.spark.scheduler.Task.run(Task.scala:89) 
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

Caused by: java.lang.UnsupportedOperationException 
     at java.util.Collections$UnmodifiableCollection.add(Collections.java:1055) 
     at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:102) 
     at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:18) 
     at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:648) 
     at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.read(FieldSerializer.java:605) 
     ... 27 more 

내가 유사한 문제를 참조하십시오 나는 스파크 응용 프로그램을 실행할 때

private A() { 
      abc_ = ""; 
      xyz_ = ""; 
      ... some more fields 
      aList_ = java.util.Collections.emptyList(); 
      ... some more fields 
    } 

, 그것은 컬렉션 "aList_"에 대한 예외를 throw 나는 다음과 같은 오류가 - protobuf 개체는 다음과 같이 보입니다 아래 링크에 있지만 아직 해결 방법이 없습니다.

Spark, Kryo Serialization Issue with ProtoBuf field

은 아무도 다른 사람이 문제를 직면 했습니까?

+0

내가 자바에서 불꽃을 사용하여 오전'trazient 게으른 val' –

+0

로 설정이 값 aList 시도 - 나는 그것이 내 다른 게시물에 설명 된 방법을 사용하여 작업을 얻었다. 일시적인 게으른 발은 내가 생각하는 스칼라 특유의 것입니까? –

답변

관련 문제