在快照工作中随机获取java.lang.ClassCastException

时间:2019-01-17 17:41:40

标签: apache-spark-sql snappydata

用Scala编写的快照作业会异常终止: java.lang.ClassCastException:com ..... $ Class1无法转换为com ..... $ Class1。

Class1是自定义类,存储在RDD中。有趣的是,在投射相同的类时会抛出此错误。到目前为止,尚未找到任何模式。

在这项工作中,我们从hbase获取数据,使用数据框使用分析元数据丰富数据,并将其推入SnappyData中的表。我们正在使用Snappydata 1.2.0.1。

不确定为什么会这样。

下面是堆栈跟踪: 作业由于阶段失败而中止:阶段42.0中的任务76失败了4次,最近一次失败:阶段42.0中的任务76.3丢失(TID 3550,HostName,执行者XX.XX.x.xxx(10360):7872):java.lang .ClassCastException:无法转换为     在org.apache.spark.sql.catalyst.expressions.GeneratedClass $ GeneratedIterator.processNext(Generated.java:86)     在org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)     在org.apache.spark.sql.execution.WholeStageCodegenRDD $$ anon $ 2.hasNext(WholeStageCodegenExec.scala:571)     在org.apache.spark.sql.execution.WholeStageCodegenRDD $$ anon $ 1.hasNext(WholeStageCodegenExec.scala:514)     在org.apache.spark.sql.execution.columnar.InMemoryRelation $$ anonfun $ 1 $$ anon $ 1.hasNext(InMemoryRelation.scala:132)     在org.apache.spark.storage.memory.MemoryStore.putIteratorAsValues(MemoryStore.scala:233)     在org.apache.spark.storage.BlockManager $$ anonfun $ doPutIterator $ 1.apply(BlockManager.scala:1006)     在org.apache.spark.storage.BlockManager $$ anonfun $ doPutIterator $ 1.apply(BlockManager.scala:997)     在org.apache.spark.storage.BlockManager.doPut(BlockManager.scala:936)     在org.apache.spark.storage.BlockManager.doPutIterator(BlockManager.scala:997)     在org.apache.spark.storage.BlockManager.getOrElseUpdate(BlockManager.scala:700)     在org.apache.spark.rdd.RDD.getOrCompute(RDD.scala:335)     在org.apache.spark.rdd.RDD.iterator(RDD.scala:286)     在org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:41)     在org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)     在org.apache.spark.rdd.RDD.iterator(RDD.scala:288)     在org.apache.spark.sql.execution.WholeStageCodegenRDD.computeInternal(WholeStageCodegenExec.scala:557)     在org.apache.spark.sql.execution.WholeStageCodegenRDD $$ anon $ 1。(WholeStageCodegenExec.scala:504)     在org.apache.spark.sql.execution.WholeStageCodegenRDD.compute(WholeStageCodegenExec.scala:503)     在org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)     在org.apache.spark.rdd.RDD.iterator(RDD.scala:288)     在org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:41)     在org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)     在org.apache.spark.rdd.RDD.iterator(RDD.scala:288)     在org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:103)     在org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:58)     在org.apache.spark.scheduler.Task.run(Task.scala:126)     在org.apache.spark.executor.Executor $ TaskRunner.run(Executor.scala:326)     在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)     在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624)     在org.apache.spark.executor.SnappyExecutor $$ anon $ 2 $$ anon $ 3.run(SnappyExecutor.scala:57)     在java.lang.Thread.run(Thread.java:748)

1 个答案:

答案 0 :(得分:1)

类在名称上不是唯一的。它们在名称和类加载器上是唯一的。

当您在应用的各个部分之间传递数据时,您会看到这种类型的ClassCastException,其中一个或两个部分都在单独的类加载器中加载。

您可能需要清理类路径,可能需要从同一类加载器解析类,或者可能必须序列化数据(特别是如果您具有依赖于在运行时重新加载代码的功能)。