【问题标题】:Spark JDBC Write to Teradata: multiple spark tasks failing with Transaction ABORTed due to deadlock error resulting in Stage failureSpark JDBC 写入 Teradata:由于死锁错误导致多个 Spark 任务失败,Transaction ABORTed 导致 Stage 失败
【发布时间】:2021-05-02 18:45:23
【问题描述】:

我正在使用 spark JDBC write 将数据从配置单元加载到 teradata 视图。我正在使用 200 个 vcore 并将数据划分为 10000 个分区。

Spark 任务失败并出现以下错误,导致阶段失败。有时应用程序成功完成但有一些重复记录

原因:java.sql.SQLException: [Teradata Database] [TeraJDBC 16.20.00.10] [Error 2631] [SQLState 40001] Transaction ABORTed due to deadlock.

下面是我用过的代码:

val df = spark.sql("select * from hive table").distinct.repartition(10000).write.mode(overwrite) .option("truncate", Truncate).j​​dbc(url,dbTable, dproperties)

Teradata 视图是使用“AS LOCKING ROW FOR ACCESS”创建的。该表还有一个唯一的 PI。

我无法弄清楚为什么某些 spark 任务因死锁错误而失败,有没有办法可以阻止我的整个 spark 应用程序因任务失败而失败。

【问题讨论】:

    标签: apache-spark-sql teradata deadlock spark-jdbc


    【解决方案1】:

    尝试插入同一个表的数十个会话可能会导致死锁。即使视图定义了访问锁,也必须获得写锁才能将行插入到后备表中。

    【讨论】:

      猜你喜欢
      • 2014-06-29
      • 2016-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      • 2014-06-15
      • 1970-01-01
      相关资源
      最近更新 更多