2014-09-05 20 views
12

Nghiên cứu sinh Spark, tôi khá mới với Spark, đó là lý do tôi hy vọng sự giúp đỡ của bạn thực sự.Cụm tia lửa độc lập. Không thể gửi công việc theo lập trình -> java.io.InvalidClassException

Tôi đang cố lên lịch công việc khá đơn giản trên cụm tia lửa từ máy tính xách tay của mình. Mặc dù nó hoạt động, khi tôi gửi nó với ./spark-submit, nó ném một ngoại lệ, khi tôi cố gắng làm điều đó theo chương trình.

Môi trường: - Spark - 1 nút chính và 2 nút công nhân (chế độ độc lập). Spark không được biên soạn, nhưng các tệp nhị phân đã được tải xuống. Phiên bản Spark - 1.0.2 - phiên bản java "1.7.0_45" - Chứa ứng dụng được đặt ở mọi nơi (trên máy khách và trên các nút của nhân viên ở cùng một nơi); - Tệp README.md cũng được sao chép vào mọi nút;

Ứng dụng Tôi đang cố gắng để chạy:

val logFile = "/user/vagrant/README.md" 

val conf = new SparkConf() 
conf.setMaster("spark://192.168.33.50:7077") 
conf.setAppName("Simple App") 
conf.setJars(List("file:///user/vagrant/spark-1.0.2-bin-hadoop1/bin/hello-apache-spark_2.10-1.0.0-SNAPSHOT.jar")) 
conf.setSparkHome("/user/vagrant/spark-1.0.2-bin-hadoop1") 

val sc = new SparkContext(conf) 

val logData = sc.textFile(logFile, 2).cache() 

...

Vì vậy, vấn đề là, rằng ứng dụng này chạy trên cụm thành công, khi tôi làm:

./spark-submit --class com.paycasso.SimpleApp --master spark://192.168.33.50:7077 --deploy-mode client file:///home/vagrant/spark-1.0.2-bin-hadoop1/bin/hello-apache-spark_2.10-1.0.0-SNAPSHOT.jar 

Nhưng nó không hoạt động, khi tôi cố gắng thực hiện tương tự bằng cách gọi sbt run

Đây là ngăn xếp chồng, mà tôi nhận được trên nút chính:

14/09/04 15:09:44 ERROR Remoting: org.apache.spark.deploy.ApplicationDescription; local class incompatible: stream classdesc serialVersionUID = -6451051318873184044, local class serialVersionUID = 583745679236071411 
java.io.InvalidClassException: org.apache.spark.deploy.ApplicationDescription; local class incompatible: stream classdesc serialVersionUID = -6451051318873184044, local class serialVersionUID = 583745679236071411 
    at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:617) 
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1622) 
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370) 
    at akka.serialization.JavaSerializer$$anonfun$1.apply(Serializer.scala:136) 
    at scala.util.DynamicVariable.withValue(DynamicVariable.scala:57) 
    at akka.serialization.JavaSerializer.fromBinary(Serializer.scala:136) 
    at akka.serialization.Serialization$$anonfun$deserialize$1.apply(Serialization.scala:104) 
    at scala.util.Try$.apply(Try.scala:161) 
    at akka.serialization.Serialization.deserialize(Serialization.scala:98) 
    at akka.remote.serialization.MessageContainerSerializer.fromBinary(MessageContainerSerializer.scala:58) 
    at akka.serialization.Serialization$$anonfun$deserialize$1.apply(Serialization.scala:104) 
    at scala.util.Try$.apply(Try.scala:161) 
    at akka.serialization.Serialization.deserialize(Serialization.scala:98) 
    at akka.remote.MessageSerializer$.deserialize(MessageSerializer.scala:23) 
    at akka.remote.DefaultMessageDispatcher.payload$lzycompute$1(Endpoint.scala:55) 
    at akka.remote.DefaultMessageDispatcher.payload$1(Endpoint.scala:55) 
    at akka.remote.DefaultMessageDispatcher.dispatch(Endpoint.scala:73) 
    at akka.remote.EndpointReader$$anonfun$receive$2.applyOrElse(Endpoint.scala:764) 
    at akka.actor.ActorCell.receiveMessage(ActorCell.scala:498) 
    at akka.actor.ActorCell.invoke(ActorCell.scala:456) 
    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:237) 
    at akka.dispatch.Mailbox.run(Mailbox.scala:219) 
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386) 
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) 
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) 
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) 
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) 

Giải pháp này có thể là gì? Cảm ơn bạn trước.

+0

Bạn đã thử chạy cục bộ với 'sbt run' chưa? –

+0

Cảm ơn, Như Lai, để được giúp đỡ của bạn. Có, tôi đã thử nó localy với địa phương [10] - nó hoạt động. Đó là lý do tại sao nó trông rất lạ, mà ví dụ rất đơn giản như vậy là khó khăn để chạy trên cluster –

+0

@ Dr.Khu: Tôi muốn làm chính xác như nhau. chương trình trên bằng cách bạn gửi một bình để kích hoạt? Tôi hơi bối rối. giúp đỡ một cách tử tế. – chaosguru

Trả lời

10

Sau khi lãng phí rất nhiều thời gian, tôi đã tìm thấy sự cố. Mặc dù tôi đã không sử dụng hadoop/hdfs trong ứng dụng của tôi, các vấn đề của khách hàng hadoop. Vấn đề là trong phiên bản hadoop-client, nó khác với phiên bản của hadoop, tia lửa được xây dựng cho. Phiên bản Hadoop của Spark 1.2.1, nhưng trong ứng dụng của tôi là 2.4.

Khi tôi thay đổi phiên bản ứng dụng khách hadoop thành 1.2.1 trong ứng dụng của mình, tôi có thể thực thi mã tia lửa trên cụm.

+0

Không đợi tôi không hiểu những gì bạn đã làm ở đây. Trong mã của bạn, nó không đề cập đến bất cứ đâu phiên bản ứng dụng khách hadoop. Tôi đang đối mặt với cùng một vấn đề vì vậy cần sự giúp đỡ của bạn xin vui lòng. –

+0

Ý tôi là, tôi đã sử dụng tia lửa phiên bản 1.0.2 được xây dựng sẵn cho Hadoop 1.x, nhưng tôi 'build.sbt' của tôi có một sự phụ thuộc vào Spark Core (' "org.apache.spark" %% " spark-core "%" 1.0.2 "') - chính xác một - và ứng dụng khách hadoop ('" org.apache.hadoop "%" hadoop-client "%" 2.4 "') - điều đó không đúng, bởi vì tia lửa được xây dựng cho phiên bản hadoop 1.x. Khi tôi thay đổi phiên bản ứng dụng khách hadoop từ 2.4 thành 1.2.1, thì ngoại lệ này đã biến mất. –

+0

Tôi đã làm tương tự với xây dựng maven của spark1.1.0 mvn -Dhadoop.version = 1.2.1 -DskipTests gói sạch được sử dụng phiên bản u được đề cập nhưng tôi tiếp tục nhận được java.io.InvalidClassException: org.apache.spark.storage.BlockManagerId; chạy tốt khi sử dụng tia lửa gửi .. xin vui lòng giúp – mithra

0

Thay vì sử dụng các thư viện Spark lõi thường xuyên, bạn có thể sử dụng phụ thuộc như vậy (xác định trên tập tin build.sbt):

resolvers += "Talend" at "https://talend-update.talend.com/nexus/content/repositories/libraries/" 
libraryDependencies += "org.talend.libraries" % "spark-assembly-1.6.0-hadoop2.6.0" % "6.0.0" 

/\ Những tia lửa lắp ráp -... hadoop ... librairies có thể khá lớn (và do đó không tương thích với push Git).

List of Spark/Hadoop Libraries Hosted by Talend

0

Nếu bạn đang sử dụng tia lửa dựng sẵn. (Không cài đặt sbt hoặc maven), hãy đảm bảo rằng tất cả các nút của nhân viên sử dụng cùng một phiên bản của tia lửa. Tôi phải đối mặt với cùng một vấn đề như một trong các nút công nhân đang sử dụng một phiên bản khác của tia lửa. giữ nguyên các phiên bản trên tất cả các nút đã giải quyết được vấn đề cho tôi. Một máy đang sử dụng spark-2.0.0 - bin-hadoop2.7 thay vì spark-2.0.0-preview-bin-hadoop2.7

Các vấn đề liên quan