apache-spark-sql - Spark JDBC 写入 Teradata:由于死锁错误导致多个 Spark 任务失败,Transaction ABORTed 导致 Stage 失败
问题描述
我正在使用 spark JDBC write 将数据从配置单元加载到 teradata 视图。我正在使用 200 个 vcore 并将数据划分为 10000 个分区。
Spark 任务失败并出现以下错误,导致阶段失败。有时应用程序成功完成但有一些重复记录
由:java.sql.SQLException: [Teradata Database] [TeraJDBC 16.20.00.10] [Error 2631] [SQLState 40001] Transaction ABORTed 由于死锁。
以下是我使用的代码:
val df = spark.sql("select * from hive table").distinct.repartition(10000).write.mode(overwrite) .option("truncate", Truncate).jdbc(url,dbTable, dproperties)
Teradata 视图是使用“AS LOCKING ROW FOR ACCESS”创建的。该表还有一个唯一的 PI。
我无法弄清楚为什么某些 spark 任务因死锁错误而失败,有没有办法可以阻止我的整个 spark 应用程序因任务失败而失败。
解决方案
数十个会话试图插入同一个表可能会导致死锁。即使视图是使用访问锁定义的,也必须获得写锁才能将行插入后备表。
推荐阅读
- html - 烤面包机(ngx-toastr)顶部中心对齐没有顶部边距
- ios - Swift:访问外部库时的 EXC_BAD_ACCESS
- javascript - Webpack 正在从我机器的全局 `node_modules` 导入模块。如何让它只从我的项目的 `node_modules` 导入?
- javascript - 从路径正则表达式中获取最后 2 或 3 个元素
- java - 获取 HibernateException:内部连接池已达到其最大大小,当前没有可用的连接
- algorithm - 描述一个算法最多 O(nm log n) 的运行时间
- regex - 如何突出显示或选择 SUMPRODUCT 和 SUMIF 正在选择的单元格?
- c++ - 如何使用基于数组的二进制堆访问最小元素?
- r - 用改变 y 轴在 R 中绘图
- abap - 基于表格条目的报告选择屏幕参数下方的多个文本行