通过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 对数据进行分组。