请问从Hive迁移同步到TiDB中的方案?

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】
v5.0.1
【问题描述】
我们在hive中有2张表,以日期分区,每天每张表会写入1000多万条数据,已经有约1年的存量数据。我们想把这2张表同步到TiDB中方便做一些HTAP的查询。
我看了相关的文档,打算先用hive->csv->lightning全量迁移,再用TiSpark每天跑批查询hive表当天的增量后写入TiDB,但是测试TiSpark写入TiDB,发现几个问题:

  1. 不支持写入分区表,写入时抛出异常 tispark currently does not support write data to partition table
  2. 速度慢,单表1千万行数据,hive中文件为500多MB,查询并写入的job花费近1小时。不知道如何确定瓶颈。
  3. TiDB中数据越多,写入就越慢,而且不能分区的话如果将来要按日期删除也会很慢
    请问大佬们,这种方案能否支持导入到分区表,如何确定TiSpark同步任务的瓶颈,或者还有更好的迁移同步方案吗?

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

  1. 当前 tispark 还不支持,可以关注点赞这个需求 https://github.com/pingcap/tispark/issues/1667
  2. 比较直观的通过 dashboard 查看这一个小时的 slow query,看下慢在哪块了,写入时需要避免自增主键/顺序递增索引导致的热点
  3. 是的,有定期删除的任务最好是通过分区表,可以考虑直接通过 tidb 写入分区表么

感谢回答,目前看来分区还是比较需要的,但是直接通过tidb写入的话性能更加不佳而且没有事务性

直接通过 tidb 写入,数据越多,写入越慢这个跟我们的理解有点不一致。能否有更详细的信息呢?另外你是指 TiDB 具有事务性你不需要还是说 TiDB 不具备事务性?

我做过jdbc写入tidb测试,随着数据量增多,写入速度也会慢慢降下来,可能跟测试环境硬件资源不足有关。
另外没有事务性指的是:用TiSpark批处理写入可以保证整个批处理的事务性,不会出现写入一部分后失败的情况。如果直接通过tidb写就不保证这个事务性了。

  1. TiSpark 版本是什么?
  2. 上游并发是否可以调大试试
  3. 写入越多越慢是指对于某个表吗?多少数据量时遇到这种情况,磁盘空间是多少?
  4. 是否考虑过使用 tidb+tiflash 测试?

1.TiSpark用的是这个帖子里给的2.3.15-snapshot版本 tiflash中decimal类型的值异常
2.Spark并发已经尽量调大了,作用不大,应该是有个日期索引导致的写入热点问题,去掉日期索引只需40多分钟。
3.这个我之前搭建的TiDB4.0版本的集群上测的,用java写程序对于一张表不断插入随机生成的数据,大概从1千万到8千万这个过程,写入速度有所下降,磁盘都是机械盘290G。不过我刚刚在新的5.0集群上测没有重现这一现象。之前的TiDB4.0集群配置比较低,4核16G,现在是部在24核剩余内存100多G的spark集群机器上。
4.我的测试集群都是1个tidb,1个pd,3个tikv和1个tiflash节点的。

如果是新的集群建议直接测试 5.0。那感觉之前的问题可能在 5.0 都解决了吧,还有哪些地方比较担心的?

暂时没有了,还是希望TiSpark尽早支持写入分区表吧:smile:

麻烦到这个版块提交需求,需求都会在这里收集,感谢。

好的:ok_hand:

:+1::+1::+1: