[ https://issues.apache.org/jira/browse/SPARK-2018?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14027753#comment-14027753 ]
Gireesh Punathil commented on SPARK-2018: ----------------------------------------- I face this same issue for a different class: org.apache.spark.SerializableWritable; local class incompatible: stream classdesc serialVersionUID = 6301214776158303468, local class serialVersionUID = -7785455416944904980 All the entities are in the same system, using same JVM version. Bad value in hex: 57726974 225BB4EC Good value in hex: 93F4818C 225BB4EC Please note that the lower word (in big endian) is same while the higher word is different. With little debugging, I extracted the byte buffer from which the de-serialization was being performed, and it looks like below. Apparently, offsets 48,49,50,51 contain the right value for the lower word (in big endian) of the SUID, while offsets 41,42,43,44 seem to be containing portion of the class name ('Writ', which is part of 'SerializableWritable'). Looks like data corruption in the serializer? Is there any configurable option through which I can disable custom serializations, and fall back (compltely) to Java serialization? In a spark configuration which runs HdfsWordCount example, which process is responsible for serializing this object? With my little understanding of the whole framework, I can see a master, a worker, an execute runner (spawned by worker) and the client who issues the test case. The client reports the execption, but I believe it just prints whatever the execute runner reports to it. ExecutorRunner actually invokes a org.apache.spark.executor.CoarseGrainedExecutorBackend to perform its task. This process never serialized any objects. is the serialization performed by the master? Or is the example exercising a pre-serialized disc file? How do we know that? Is there any debug option which reports messages on step-by-step serialization / de-serialization process? I have all the tools and debug capabilities at the JVM / native level, but lack of understanding of the spark topology makes it hard to move further. Finally, if I modify a scala file, how do I effect the changes into the class file and the parent jar file? when I performed sbt assembly or sbt package it indeed compiled the scala file, but the .class file ( org/apache/spark/SerializableWritable.class) or the .jar file (spark-core_2.10-0.9.1.jar) do not seem to have updated. Is there any other way of doing it? [0] = 172, 0xac [1] = 116, 0x74, 't' [2] = 31, 0x1f [3] = 172, 0xac [4] = 237, 0xed [5] = 0, 0x00 [6] = 5, 0x05 [7] = 115, 0x73, 's' [8] = 114, 0x72, 'r' [9] = 0, 0x00 [10] = 37, 0x25, '%' // indicates next 37 bytes are for the class name? then probably multiple over-writes happened: i) the classname over the SUID, ii) something else on the classname (bytes 45 through 48) [11] = 111, 0x6f, 'o' [12] = 114, 0x72, 'r' [13] = 103, 0x67, 'g' [14] = 46, 0x2e, '.' [15] = 97, 0x61, 'a' [16] = 112, 0x70, 'p' [17] = 97, 0x61, 'a' [18] = 99, 0x63, 'c' [19] = 104, 0x68, 'h' [20] = 101, 0x65, 'e' [21] = 46, 0x2e, '.' [22] = 115, 0x73, 's' [23] = 112, 0x70, 'p' [24] = 97, 0x61, 'a' [25] = 114, 0x72, 'r' [26] = 107, 0x6b, 'k' [27] = 46, 0x2e, '.' [28] = 83, 0x53, 'S' [29] = 101, 0x65, 'e' [30] = 114, 0x72, 'r' [31] = 105, 0x69, 'i' [32] = 97, 0x61, 'a' [33] = 108, 0x6c, 'l' [34] = 105, 0x69, 'i' [35] = 8, 0x08 [36] = 122, 0x7a, 'z' [37] = 97, 0x61, 'a' [38] = 98, 0x62, 'b' [39] = 108, 0x6c, 'l' [40] = 101, 0x65, 'e' [41] = 87, 0x57, 'W' [42] = 114, 0x72, 'r' [43] = 105, 0x69, 'i' [44] = 116, 0x74, 't' [45] = 192, 0xc0 [46] = 7, 0x07 [47] = 15, 0x0f [48] = 34, 0x22, '"' [49] = 91, 0x5b, '[' [50] = 180, 0xb4 [51] = 236, 0xec [52] = 3, 0x03 [53] = 0, 0x00 [54] = 0, 0x00 [55] = 120, 0x78, 'x' [56] = 112, 0x70, 'p' [57] = 122, 0x7a, 'z' [58] = 0, 0x00 [59] = 0, 0x00 [60] = 4, 0x04 [61] = 0, 0x00 [62] = 0, 0x00 [63] = 32, 0x20, ' ' [64] = 224, 0xe0 ... > Big-Endian (IBM Power7) Spark Serialization issue > -------------------------------------------------- > > Key: SPARK-2018 > URL: https://issues.apache.org/jira/browse/SPARK-2018 > Project: Spark > Issue Type: Bug > Affects Versions: 1.0.0 > Environment: hardware : IBM Power7 > OS:Linux version 2.6.32-358.el6.ppc64 > (mockbu...@ppc-017.build.eng.bos.redhat.com) (gcc version 4.4.7 20120313 (Red > Hat 4.4.7-3) (GCC) ) #1 SMP Tue Jan 29 11:43:27 EST 2013 > JDK: Java(TM) SE Runtime Environment (build pxp6470sr5-20130619_01(SR5)) > IBM J9 VM (build 2.6, JRE 1.7.0 Linux ppc64-64 Compressed References > 20130617_152572 (JIT enabled, AOT enabled) > Hadoop:Hadoop-0.2.3-CDH5.0 > Spark:Spark-1.0.0 or Spark-0.9.1 > spark-env.sh: > export JAVA_HOME=/opt/ibm/java-ppc64-70/ > export SPARK_MASTER_IP=9.114.34.69 > export SPARK_WORKER_MEMORY=10000m > export SPARK_CLASSPATH=/home/test1/spark-1.0.0-bin-hadoop2/lib > export STANDALONE_SPARK_MASTER_HOST=9.114.34.69 > #export SPARK_JAVA_OPTS=' -Xdebug > -Xrunjdwp:transport=dt_socket,address=99999,server=y,suspend=n ' > Reporter: Yanjie Gao > > We have an application run on Spark on Power7 System . > But we meet an important issue about serialization. > The example HdfsWordCount can meet the problem. > ./bin/run-example org.apache.spark.examples.streaming.HdfsWordCount > localdir > We used Power7 (Big-Endian arch) and Redhat 6.4. > Big-Endian is the main cause since the example ran successfully in another > Power-based Little Endian setup. > here is the exception stack and log: > Spark Executor Command: "/opt/ibm/java-ppc64-70//bin/java" "-cp" > "/home/test1/spark-1.0.0-bin-hadoop2/lib::/home/test1/src/spark-1.0.0-bin-hadoop2/conf:/home/test1/src/spark-1.0.0-bin-hadoop2/lib/spark-assembly-1.0.0-hadoop2.2.0.jar:/home/test1/src/spark-1.0.0-bin-hadoop2/lib/datanucleus-rdbms-3.2.1.jar:/home/test1/src/spark-1.0.0-bin-hadoop2/lib/datanucleus-api-jdo-3.2.1.jar:/home/test1/src/spark-1.0.0-bin-hadoop2/lib/datanucleus-core-3.2.2.jar:/home/test1/src/hadoop-2.3.0-cdh5.0.0/etc/hadoop/:/home/test1/src/hadoop-2.3.0-cdh5.0.0/etc/hadoop/" > "-XX:MaxPermSize=128m" "-Xdebug" > "-Xrunjdwp:transport=dt_socket,address=99999,server=y,suspend=n" "-Xms512M" > "-Xmx512M" "org.apache.spark.executor.CoarseGrainedExecutorBackend" > "akka.tcp://spark@9.186.105.141:60253/user/CoarseGrainedScheduler" "2" > "p7hvs7br16" "4" "akka.tcp://sparkWorker@p7hvs7br16:59240/user/Worker" > "app-20140604023054-0000" > ======================================== > 14/06/04 02:31:20 WARN util.NativeCodeLoader: Unable to load native-hadoop > library for your platform... using builtin-java classes where applicable > 14/06/04 02:31:21 INFO spark.SecurityManager: Changing view acls to: > test1,yifeng > 14/06/04 02:31:21 INFO spark.SecurityManager: SecurityManager: authentication > disabled; ui acls disabled; users with view permissions: Set(test1, yifeng) > 14/06/04 02:31:22 INFO slf4j.Slf4jLogger: Slf4jLogger started > 14/06/04 02:31:22 INFO Remoting: Starting remoting > 14/06/04 02:31:22 INFO Remoting: Remoting started; listening on addresses > :[akka.tcp://sparkExecutor@p7hvs7br16:39658] > 14/06/04 02:31:22 INFO Remoting: Remoting now listens on addresses: > [akka.tcp://sparkExecutor@p7hvs7br16:39658] > 14/06/04 02:31:22 INFO executor.CoarseGrainedExecutorBackend: Connecting to > driver: akka.tcp://spark@9.186.105.141:60253/user/CoarseGrainedScheduler > 14/06/04 02:31:22 INFO worker.WorkerWatcher: Connecting to worker > akka.tcp://sparkWorker@p7hvs7br16:59240/user/Worker > 14/06/04 02:31:23 INFO worker.WorkerWatcher: Successfully connected to > akka.tcp://sparkWorker@p7hvs7br16:59240/user/Worker > 14/06/04 02:31:24 INFO executor.CoarseGrainedExecutorBackend: Successfully > registered with driver > 14/06/04 02:31:24 INFO spark.SecurityManager: Changing view acls to: > test1,yifeng > 14/06/04 02:31:24 INFO spark.SecurityManager: SecurityManager: authentication > disabled; ui acls disabled; users with view permissions: Set(test1, yifeng) > 14/06/04 02:31:24 INFO slf4j.Slf4jLogger: Slf4jLogger started > 14/06/04 02:31:24 INFO Remoting: Starting remoting > 14/06/04 02:31:24 INFO Remoting: Remoting started; listening on addresses > :[akka.tcp://spark@p7hvs7br16:58990] > 14/06/04 02:31:24 INFO Remoting: Remoting now listens on addresses: > [akka.tcp://spark@p7hvs7br16:58990] > 14/06/04 02:31:24 INFO spark.SparkEnv: Connecting to MapOutputTracker: > akka.tcp://spark@9.186.105.141:60253/user/MapOutputTracker > 14/06/04 02:31:25 INFO spark.SparkEnv: Connecting to BlockManagerMaster: > akka.tcp://spark@9.186.105.141:60253/user/BlockManagerMaster > 14/06/04 02:31:25 INFO storage.DiskBlockManager: Created local directory at > /tmp/spark-local-20140604023125-3f61 > 14/06/04 02:31:25 INFO storage.MemoryStore: MemoryStore started with capacity > 307.2 MB. > 14/06/04 02:31:25 INFO network.ConnectionManager: Bound socket to port 39041 > with id = ConnectionManagerId(p7hvs7br16,39041) > 14/06/04 02:31:25 INFO storage.BlockManagerMaster: Trying to register > BlockManager > 14/06/04 02:31:25 INFO storage.BlockManagerMaster: Registered BlockManager > 14/06/04 02:31:25 INFO spark.HttpFileServer: HTTP File server directory is > /tmp/spark-7bce4e43-2833-4666-93af-bd97c327497b > 14/06/04 02:31:25 INFO spark.HttpServer: Starting HTTP Server > 14/06/04 02:31:25 INFO server.Server: jetty-8.y.z-SNAPSHOT > 14/06/04 02:31:26 INFO server.AbstractConnector: Started > SocketConnector@0.0.0.0:39958 > 14/06/04 02:31:26 INFO executor.CoarseGrainedExecutorBackend: Got assigned > task 2 > 14/06/04 02:31:26 INFO executor.Executor: Running task ID 2 > 14/06/04 02:31:26 ERROR executor.Executor: Exception in task ID 2 > java.io.InvalidClassException: scala.reflect.ClassTag$$anon$1; local class > incompatible: stream classdesc serialVersionUID = -8102093212602380348, local > class serialVersionUID = -4937928798201944954 > at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:678) > at > java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1678) > at > java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1573) > at > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1827) > at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1406) > at > java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2047) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1971) > at > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1854) > at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1406) > at > java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2047) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1971) > at > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1854) > at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1406) > at java.io.ObjectInputStream.readObject(ObjectInputStream.java:409) > at scala.collection.immutable.$colon$colon.readObject(List.scala:362) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:76) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:607) > at > java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1078) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1949) > at > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1854) > at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1406) > at > java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2047) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1971) > at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1854) > at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1406) > at java.io.ObjectInputStream.readObject(ObjectInputStream.java:409) > at scala.collection.immutable.$colon$colon.readObject(List.scala:362) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:76) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:607) > at > java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1078) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1949) > at > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1854) > at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1406) > at > java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2047) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1971) > at > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1854) > at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1406) > at > java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2047) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1971) > at > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1854) > at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1406) > at java.io.ObjectInputStream.readObject(ObjectInputStream.java:409) > at scala.collection.immutable.$colon$colon.readObject(List.scala:362) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:76) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:607) > at > java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1078) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1949) > at > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1854) > at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1406) > at > java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2047) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1971) > at > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1854) > at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1406) > at > java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2047) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1971) > at > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1854) > at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1406) > at java.io.ObjectInputStream.readObject(ObjectInputStream.java:409) > at scala.collection.immutable.$colon$colon.readObject(List.scala:362) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:76) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:607) > at > java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1078) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1949) > at > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1854) > at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1406) > at > java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2047) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1971) > at > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1854) > at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1406) > at > java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2047) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1971) > at > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1854) > at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1406) > at java.io.ObjectInputStream.readObject(ObjectInputStream.java:409) > at scala.collection.immutable.$colon$colon.readObject(List.scala:362) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:76) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:607) > at java.lang.reflect.Method.invoke(Method.java:607) > at > java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1078) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1949) > at > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1854) > at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1406) > at > java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2047) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1971) > at > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1854) > at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1406) > at java.io.ObjectInputStream.readObject(ObjectInputStream.java:409) > at > org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:63) > at > org.apache.spark.scheduler.ResultTask$.deserializeInfo(ResultTask.scala:61) > at > org.apache.spark.scheduler.ResultTask.readExternal(ResultTask.scala:141) > at > java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1893) > at > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1852) > at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1406) > at java.io.ObjectInputStream.readObject(ObjectInputStream.java:409) > at > org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:63) > at > org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:85) > at > org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:169) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) > at java.lang.Thread.run(Thread.java:781) > 14/06/04 02:31:26 ERROR executor.CoarseGrainedExecutorBackend: Driver > Disassociated [akka.tcp://sparkExecutor@p7hvs7br16:39658] -> > [akka.tcp://spark@9.186.105.141:60253] disassociated! Shutting down. -- This message was sent by Atlassian JIRA (v6.2#6252)