TiSpark 2.5.0 写入TiDB出现错误,产生Task重试

Bug 反馈

【 Bug 的影响】

使用TiSpark写入TiDB,采用write的方式直写tikv。出现错误导致Spark重试Task,任务运行时间变长。
错误如下:
com.pingcap.tikv.exception.TiKVException: Execution exception met.
at com.pingcap.tikv.util.ClientUtils.getTasksWithOutput(ClientUtils.java:222)
at com.pingcap.tikv.KVClient.doSendBatchGet(KVClient.java:118)
at com.pingcap.tikv.KVClient.batchGet(KVClient.java:96)
at com.pingcap.tikv.Snapshot.batchGet(Snapshot.java:91)

【可能的问题复现步骤】

在资源相对不足,即出现shuffle溢写磁盘的情况下,运行TiSpark写入TiDB。

【看到的非预期行为】

出现如下的失败任务重试:

【相关组件及具体版本】

TiDB 5.3.0 部署在K8s上,TiSpark 2.5.0 Spark 3.0.3或者3.1.2

【其他背景信息或者截图】

经过日志排查,信息指向com.pingcap.tikv.util.ConcreteBackOffer这个类,日志中说访问


131行backOffFunctionMap报java.util.ConcurrentModificationException错误
我把backOffFunctionMap的定义由HashMap改成ConcurrentHashMap后,此错误未在重现,改回去也没再重现。
请这方面的专家给评审一下,这个是不是个问题?是不是这个地方的问题?

HashMap 并发做这个写入是不行的,报告的那个异常是这个问题引起的。Concurrency 问题是随机的,没重现不代表它不存在,这里改成 ConcurrentHashMap 应该是合理的。
另外 TiKV 直写过去还有一些问题尚未完全解决,建议现在线用 JDBC 方式写入。

3 个赞

非常感谢

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。