【问题标题】:Randomly getting java.lang.ClassCastException in snappy job在 snappy 工作中随机获取 java.lang.ClassCastException
【发布时间】:2019-06-11 23:29:48
【问题描述】:

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

Class1 是存储在 RDD 中的自定义类。有趣的是这个错误是在铸造同一个类时抛出的。到目前为止,没有发现任何模式。

在作业中,我们从 hbase 获取数据,使用 Dataframes 使用分析元数据丰富数据,并将其推送到 SnappyData 中的表中。我们正在使用 Snappydata 1.2.0.1。

不知道为什么会这样。

下面是堆栈跟踪: 作业因阶段故障而中止:阶段 42.0 中的任务 76 失败 4 次,最近一次失败:阶段 42.0 中丢失任务 76.3(TID 3550,主机名,执行程序 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)

【问题讨论】:

    标签: apache-spark-sql snappydata


    【解决方案1】:

    类的名称不是唯一的。它们在名称 + 类加载器上是独一无二的。

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

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

    【讨论】:

    • 感谢您的回答。这确实是与类路径相关的问题。
    猜你喜欢
    • 1970-01-01
    • 2023-01-28
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 2011-09-04
    • 2016-12-07
    相关资源
    最近更新 更多