2013-10-28 1 views
2

현재 독립형 모드에서 Cassandra를 사용하여 Spark를 실행하려고하면 몇 가지 문제가 발생합니다.Cassandra의 스파크 : spark.kryo.registrator를 등록하지 못했습니다.

처음에는 SparkContext에서 mater = "local [4]"매개 변수를 사용하여 성공적으로 실행합니다.

그런 다음 독립 실행 형 모드로 이동하려고합니다. 내가 사용하는 것은 다음과 같습니다

우분투 : 12.04 카산드라 : 1.2.11 스파크 : 0.8.0 스칼라 : 2.9.3 JDK : 오라클 1.6.0_35 Kryo : 처음에는 2.21

, 내가 가지고 "읽지 않은 블록"오류. 다른 주제에 대한 제안으로 Kryo 시리얼 라이저를 사용하고 Twitter Chill을 추가하도록 변경합니다. 그 후, 나는 내 콘솔과 같은 아래의 예외에 "spark.kryo.registrator을 등록하지 못했습니다"GET :

13/10/28 12:12:36 INFO cluster.ClusterTaskSetManager: Lost TID 0 (task 0.0:0) 
13/10/28 12:12:36 INFO cluster.ClusterTaskSetManager: Loss was due to java.io.EOFException 
java.io.EOFException 
    at org.apache.spark.serializer.KryoDeserializationStream.readObject(KryoSerializer.scala:109) 
    at org.apache.spark.broadcast.HttpBroadcast$.read(HttpBroadcast.scala:150) 
    at org.apache.spark.broadcast.HttpBroadcast.readObject(HttpBroadcast.scala:56) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at java.io.ObjectStreamClass.invokeReadObject(Unknown Source) 
    at java.io.ObjectInputStream.readSerialData(Unknown Source) 
    at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) 
    at java.io.ObjectInputStream.readObject0(Unknown Source) 
    at java.io.ObjectInputStream.defaultReadFields(Unknown Source) 
    at java.io.ObjectInputStream.readSerialData(Unknown Source) 
    at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) 
    at java.io.ObjectInputStream.readObject0(Unknown Source) 
    at java.io.ObjectInputStream.defaultReadFields(Unknown Source) 
    at java.io.ObjectInputStream.readSerialData(Unknown Source) 
    at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) 
    at java.io.ObjectInputStream.readObject0(Unknown Source) 
    at java.io.ObjectInputStream.readObject(Unknown Source) 
    at scala.collection.immutable.$colon$colon.readObject(List.scala:435) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at java.io.ObjectStreamClass.invokeReadObject(Unknown Source) 
    at java.io.ObjectInputStream.readSerialData(Unknown Source) 
    at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) 
    at java.io.ObjectInputStream.readObject0(Unknown Source) 
    at java.io.ObjectInputStream.defaultReadFields(Unknown Source) 
    at java.io.ObjectInputStream.readSerialData(Unknown Source) 
    at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) 
    at java.io.ObjectInputStream.readObject0(Unknown Source) 
    at java.io.ObjectInputStream.readObject(Unknown Source) 
    at org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:39) 
    at org.apache.spark.scheduler.ResultTask$.deserializeInfo(ResultTask.scala:61) 
    at org.apache.spark.scheduler.ResultTask.readExternal(ResultTask.scala:129) 
    at java.io.ObjectInputStream.readExternalData(Unknown Source) 
    at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) 
    at java.io.ObjectInputStream.readObject0(Unknown Source) 
    at java.io.ObjectInputStream.readObject(Unknown Source) 
    at org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:39) 
    at org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:61) 
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:153) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

사람도 답이 제대로 registrator 등록되지 않은 이전 스파크에서 예외 : EOFException가 발생했습니다. 스파크 가이드에 따라 등록자를 등록합니다. 아래 등록자 :

class MyRegistrator extends KryoRegistrator { 
     override def registerClasses(kryo: Kryo) { 
      kryo.register(classOf[org.apache.spark.rdd.RDD[(Map[String, ByteBuffer], Map[String, ByteBuffer])]]) 
      kryo.register(classOf[String], 1) 
      kryo.register(classOf[Map[String, ByteBuffer]], 2) 
     } 
    } 

그리고 가이드와 마찬가지로 속성을 설정합니다.

System.setProperty("spark.serializer", "org.apache.spark.serializer.KryoSerializer") 
    System.setProperty("spark.kryo.registrator", "main.scala.MyRegistrator") 

아무도 내가 잘못한 부분에 대한 힌트를 줄 수 있습니까? 감사합니다. .

답변

0

내 경험에 비추어 볼 때 "EOFException"및 "읽지 않은 데이터"블록을 얻는 이유는 같습니다. 클러스터에서 실행될 때 라이브러리가 부족합니다. 가장 유선적인 것은 스파크에 "sbt assembly"라는 라이브러리를 추가했고 라이브러리가 실제로 jars 폴더에 존재한다는 것입니다. 그러나 스파크는 여전히 그들을 찾아 성공적으로로드 할 수 없습니다. 그런 다음 스파크 컨텍스트에 라이브러리를 추가하면 작동합니다. 즉, 코드에서 지정하여 각 노드에 라이브러리를 전송해야합니다.

+0

SparkContext.addJar()는 Spark의 [클러스터에 코드를 전달하는 기본 방법]입니다 (https://spark.incubator.apache.org/docs/latest/cluster-overview.html#shipping-code-to - 클러스터). 사용자 지정 라이브러리를 추가하기 위해 Spark의 자체 빌드를 수정하는 것을 권장하지 않습니다.이 작업을 시도해도 작동하지 않으면 업데이트 된 Spark 어셈블리를 작업자 컴퓨터에 복사해야 할 필요가 있습니다. 이는 불편합니다. 'addJar()'에). –

+0

나는 고맙습니다. 고맙습니다. – cjcrobin

관련 문제