2016-06-01 1 views
2

Я регистрирую классы, которые имеют бизнес-логику и классы моделей с Kyro в искровом режиме. Я получаю НИЖЕ за исключениемSpark - зарегистрировать объекты модели с Kyro - вызван: java.lang.IllegalArgumentException: класс не зарегистрирован:

> Job aborted due to stage failure: Task 14 in stage 1.0 failed 4 times, 
> most recent failure: Lost task 14.3 in stage 1.0 (TID 90, **): 
> java.lang.IllegalArgumentException: Class is not registered: Object[] 
> Note: To register this class use: kryo.register(Object[].class); at 
> com.esotericsoftware.kryo.Kryo.getRegistration(Kryo.java:442)  at 
> com.esotericsoftware.kryo.util.DefaultClassResolver.writeClass(DefaultClassResolver.java:79) 
> at com.esotericsoftware.kryo.Kryo.writeClass(Kryo.java:472)  at 
> com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:565)  at 
> org.apache.spark.serializer.KryoSerializerInstance.serialize(KryoSerializer.scala:296) 
> at 
> org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:239) 
> 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) 
> 
> Driver stacktrace: 

Kyro Registrtor: класс

public class KyroSerializer implements KryoRegistrator { 

     @Override 
     public void registerClasses(Kryo kryo) { 
      kryo.register(People.class); 
      kryo.register(Lookup.class); 

     } 
    } 

Модель:

class people implements Serializable{ 
     private static final long serialVersionUID = 1L; ...... } 

    public class Lookup implements Serializable{ 
     private static final long serialVersionUID = 1L; 

     private String code1; 
     private String code2; 

} 

Наконец мой контекст Spark:

sc.set ("искру. kryo.registrator ", KyroSerializer.class.getName())

ответ

0

Из-за исключения, кажется, что kryo не зарегистрировал объект класса для Object[] (массив, чьи записи имеют тип Object). Пожалуйста, попробуйте изменить код следующим образом:

public class KyroSerializer implements KryoRegistrator { 

    @Override 
    public void registerClasses(Kryo kryo) { 
     kryo.register(Object[].class);  // add this line to your class 
     kryo.register(People.class); 
     kryo.register(Lookup.class); 
    } 
} 

Кроме того, я хотел бы зарегистрировать свой собственный класс регистратору с искрой, как этот

sc.set("spark.kryo.registrator", KyroSerializer.class.getCanonicalName()); 

Если он работает для вас, хотя, то просто игнорируйте мой последний замечание.

Смежные вопросы