通过tispark 加载数据到tidb失败 Epoch Not Match

tidb 5.4
spark 3.1.3
tispark 2.5.0
tikv 10个节点20个实例 独立部署无复用 主机48core 256GB内存

通过spark加载数据到tidb spark有945个core 加载失败错误信息是
fail to split region because epoch not match

已经pre_split_regions 8bit

因为无法准确预估结果集规模所以无法保证region不分裂
如何避免异常发生请指教

1赞

加载方式是什么?jdbc的还是直写的?报错堆栈路径给一下,我查一下是个啥问题。

直写 我当时手机没电了 没拍 下次我复现一下

有history server么?可以找一下历史日志

格式有问题吧

什么格式,我把presplit增加到10bit 加载就没有异常了

您好,请问 上游是什么类型的数据源?选择 tispark 加载数据到 tidb 是出于什么考虑?

hive表,hive里是个巨大的数仓 需要将一部分数据根据请求加载到mpp中进行下一步分析 hive 太厚重各种操作都很慢

既然无法获取数据规模,那可以试下 限制一个批次多大的规模,在保证一个批次下不会发生 epoch 追不上,可能需要多次参数调整以适应 tidb 的写入性能。

建议也可以尝试使用 tidb-lightning 的 local backend,它是专门高并发加载的工具。

因为场景是一个类似于数据探索的应用 用lightning之类的方法太厚重了。之所以选择spark 就是希望可以用spark 打通mpp和hive 另外还有tidb 和hive进行join 再将结果写回tidb 的场景

另外epoch追不上是什么概念 在利用tispark加载数据的时候如何进行流控呢?多谢:pray:

epoch 就是 raft group 的 “时期”,每次改变 member 信息的时候都 +1。
tispark 限制批次大小就用 spark 限制批次大小的方法就可以了,比如 获取数据的时候 按主键分批,或是使用 scala api 对数据进行分组。