【问题标题】:Spark ERROR executor: Exception in task 0.0 in stage 0.0 (tid 0) java.lang.ArithmeticExceptionSpark ERROR 执行器:阶段 0.0 (tid 0) 中的任务 0.0 中的异常 java.lang.ArithmeticException
【发布时间】:2021-06-20 06:33:54
【问题描述】:

当我使用 Cassandra 3.11.9 和 Spark 3.0.1 运行应用程序 Java Web 时出现以下错误。

我的问题是为什么它只在部署应用程序后才发生?在开发环境中没有发生。

2021-03-24 08:50:41.150 信息 19613 --- [uler-event-loop] org.apache.spark.scheduler.DAGScheduler:ShuffleMapStage 0 (collectAsList at FalhaService.java:60) 由于 Job 在 7.513 秒内失败 由于阶段失败而中止:阶段 0.0 中的任务 0 失败 1 次,大多数 最近失败:在阶段 0.0 (TID 0) 中丢失任务 0.0 (GDBHML08 执行程序 驱动程序):java.lang.ArithmeticException:整数溢出 java.lang.Math.toIntExact(Math.java:1011) 在 org.apache.spark.sql.catalyst.util.DateTimeUtils$.fromJavaDate(DateTimeUtils.scala:90) 在 org.apache.spark.sql.catalyst.CatalystTypeConverters$DateConverter$.toCatalystImpl(CatalystTypeConverters.scala:306) 在 org.apache.spark.sql.catalyst.CatalystTypeConverters$DateConverter$.toCatalystImpl(CatalystTypeConverters.scala:305) 在 org.apache.spark.sql.catalyst.CatalystTypeConverters$CatalystTypeConverter.toCatalyst(CatalystTypeConverters.scala:107) 在 org.apache.spark.sql.catalyst.CatalystTypeConverters$StructConverter.toCatalystImpl(CatalystTypeConverters.scala:252) 在 org.apache.spark.sql.catalyst.CatalystTypeConverters$StructConverter.toCatalystImpl(CatalystTypeConverters.scala:242) 在 org.apache.spark.sql.catalyst.CatalystTypeConverters$CatalystTypeConverter.toCatalyst(CatalystTypeConverters.scala:107) 在 org.apache.spark.sql.catalyst.CatalystTypeConverters$.$anonfun$createToCatalystConverter$2(CatalystTypeConverters.scala:426) 在 com.datastax.spark.connector.datasource.UnsafeRowReader.read(UnsafeRowReaderFactory.scala:34) 在 com.datastax.spark.connector.datasource.UnsafeRowReader.read(UnsafeRowReaderFactory.scala:21) 在 com.datastax.spark.connector.datasource.CassandraPartitionReaderBase.$anonfun$getIterator$2(CassandraScanPartitionReaderFactory.scala:110) 在 scala.collection.Iterator$$anon$10.next(Iterator.scala:461) 在 scala.collection.Iterator$$anon$11.next(Iterator.scala:496) 在 com.datastax.spark.connector.datasource.CassandraPartitionReaderBase.next(CassandraScanPartitionReaderFactory.scala:66) 在 org.apache.spark.sql.execution.datasources.v2.PartitionIterator.hasNext(DataSourceRDD.scala:79) 在 org.apache.spark.sql.execution.datasources.v2.MetricsIterator.hasNext(DataSourceRDD.scala:112) 在 org.apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:37) 在 scala.collection.Iterator$$anon$10.hasNext(Iterator.scala:460) 在 org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.agg_doAggregateWithKeys_0$(Unknown 来源)在 org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(未知 来源)在 org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43) 在 org.apache.spark.sql.execution.WholeStageCodegenExec$$anon$1.hasNext(WholeStageCodegenExec.scala:755) 在 scala.collection.Iterator$$anon$10.hasNext(Iterator.scala:460) 在 org.apache.spark.shuffle.sort.BypassMergeSortShuffleWriter.write(BypassMergeSortShuffleWriter.java:132) 在 org.apache.spark.shuffle.ShuffleWriteProcessor.write(ShuffleWriteProcessor.scala:59) 在 org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:99) 在 org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:52) 在 org.apache.spark.scheduler.Task.run(Task.scala:131) 在 org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$3(Executor.scala:497) 在 org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1439) 在 org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:500) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748)

驱动程序堆栈跟踪:2021-03-24 08:50:41.189 INFO 19613 --- [nio-8080-exec-2] org.apache.spark.scheduler.DAGScheduler:作业 0 失败:FalhaService.java:60 处的 collectAsList,耗时 8.160348 秒

该错误所在行的代码:

List<Row> rows = dataset.collectAsList();

代码块:

Dataset<Row> dataset = session.sql(sql.toString());

List<Row> rows = dataset.collectAsList();
ListIterator<Row> t = rows.listIterator();
while (t.hasNext()) {
    Row row = t.next();
    grafico = new EstGraficoRelEstTela();
    grafico.setSuperficie(row.getLong(0));
    grafico.setSubsea(row.getLong(1) + row.getLong(2));
    grafico.setNomeTipoSensor(row.getString(3));
    graficoLocalFalhas.add(grafico);
}
session.close();

谢谢,

【问题讨论】:

    标签: java scala apache-spark cassandra spark-cassandra-connector


    【解决方案1】:

    您的数据库中似乎有不正确的数据,有些日期字段是遥远的未来。如果你查看source code,你可以看到它首先转换成毫秒,然后转换成天,这个转换溢出了整数。这可以解释为什么代码在开发环境中工作......

    您可以要求您的管理员检查文件是否有损坏的数据,例如,使用nodetool scrub 命令。

    附:你确定你使用的是 Spark 3.0.1 吗?错误中函数的位置与 Spark 3.1.1 匹配...

    【讨论】:

    • 非常感谢。这就是问题所在。字段日期中的数据不正确。我更正了桌子上的日期,错误已修复。我使用 spark 3.0.1 作为 maven 依赖。现在我改成了&lt;version&gt;3.1.1&lt;/version&gt;
    • 要小心。 3.1.1 包含一个重大更改,因此某些优化,如 DirectJoin 会崩溃。 3.1 将需要新版本的连接器来修复该问题
    • 好的,@Alex Ott。我改变了所有的依赖,它是功能。不过大家还是要注意的。谢谢。
    猜你喜欢
    • 2022-12-30
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 2022-11-06
    • 1970-01-01
    • 2019-09-22
    • 2022-11-12
    • 1970-01-01
    相关资源
    最近更新 更多