写点什么

Lightning 导入单个 TB 级 CSV 文件加速方案

  • 2024-12-06
    北京
  • 本文字数:2205 字

    阅读完需:约 7 分钟

作者: cchouqiang 原文来源:https://tidb.net/blog/a193c892

背景

  在国产化数据库替代过程中,有一项必不可少的任务就是数据迁移,我们常用的技术手段之一是把数据库的数据导出成csv格式的文件,然后将csv格式的文件导入的国产数据库中。
本文介绍的是从SAP数据库导出的TB级CSV文件加速导入到TiDB数据库中。从SAP数据库导出11T的单表,导入到TiDB数据库中;SAP导出的数据文件总共有4个csv文件,每个大小约2.6TB。使用lightning工具导入到TiDB数据库中。
复制代码


TiDB 数据库版本为 v8.1.0。

提速方案

1、将 2.6TB 的 csv 切成 256M 左右一个小文件。

使用 split 切分大文件


-l 指定行数切割,防止出现断行数据


-a 切分后有几位数字


nohup split -l 128000 -d -a 6 data.csv DB.TABLE &
复制代码


计算切分行数:


tail -2000 data.csv > a.txtdu -sh a.txt
复制代码


根据 a.txt 文件的大小,使用 256M 除以 a.txt 文件大小,得出的数值乘以 2000,即切分的行数


例如:a.txt 4M,(2564)*2000=128000,即 split 切分的行数。


小编之前写过一个工具:使用 TiSplit 进行切分: https://tidb.net/blog/6001a7ec


可以利用 TiSplit 工具,把大的 CSV 文件切分成小的文件。

2、开多个 lightning 窗口同时导入。

如果有多台服务器,可以充分利用资源,把现有的 csv 穿到多台服务器上,同时进行 lightning 导入。


把此参数打开:parallel-import = true


> 注意:
> 该参数在7.5版本及以上版本才支持!
> 在local模式下,lightning多窗口同时导入数据时,每个窗口的csv名字不能一样,否则会跳过相同名字的csv,导致导入的数据不全。
> ```

eg:有4台机器进行并行导入,每台机器使用TiSplit工具切分后,需要执行如下命令,将每台机器的csv文件进行重命名,保证每台机器的csv文件的名字都是唯一的。


SQL#node1:mv SAPSR3.%2fBIC%2fAA2CW0003200000 SAPSR3.%2fBIC%2fAA2CW00032.10000.csvmv SAPSR3.%2fBIC%2fAA2CW0003200001 SAPSR3.%2fBIC%2fAA2CW00032.10001.csvmv SAPSR3.%2fBIC%2fAA2CW0003200002 SAPSR3.%2fBIC%2fAA2CW00032.10002.csvmv SAPSR3.%2fBIC%2fAA2CW0003200003 SAPSR3.%2fBIC%2fAA2CW00032.10003.csv#node3:mv SAPSR3.%2fBIC%2fAA2CW0003200000 SAPSR3.%2fBIC%2fAA2CW00032.20000.csvmv SAPSR3.%2fBIC%2fAA2CW0003200001 SAPSR3.%2fBIC%2fAA2CW00032.20001.csvmv SAPSR3.%2fBIC%2fAA2CW0003200002 SAPSR3.%2fBIC%2fAA2CW00032.20002.csvmv SAPSR3.%2fBIC%2fAA2CW0003200003 SAPSR3.%2fBIC%2fAA2CW00032.20003.csv#node3:mv SAPSR3.%2fBIC%2fAA2CW0003200000 SAPSR3.%2fBIC%2fAA2CW00032.30000.csvmv SAPSR3.%2fBIC%2fAA2CW0003200001 SAPSR3.%2fBIC%2fAA2CW00032.30001.csvmv SAPSR3.%2fBIC%2fAA2CW0003200002 SAPSR3.%2fBIC%2fAA2CW00032.30002.csvmv SAPSR3.%2fBIC%2fAA2CW0003200003 SAPSR3.%2fBIC%2fAA2CW00032.30003.csv#node4:mv SAPSR3.%2fBIC%2fAA2CW0003200000 SAPSR3.%2fBIC%2fAA2CW00032.40000.csvmv SAPSR3.%2fBIC%2fAA2CW0003200001 SAPSR3.%2fBIC%2fAA2CW00032.40001.csvmv SAPSR3.%2fBIC%2fAA2CW0003200002 SAPSR3.%2fBIC%2fAA2CW00032.40002.csvmv SAPSR3.%2fBIC%2fAA2CW0003200003 SAPSR3.%2fBIC%2fAA2CW00032.40003.csv




导入过程中遇到过“got signal to exit”异常中断问题:

![](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/unnamed-1733280702617.png)

将nohup lightning --config tidb-lightning.toml &放入到脚本里,即可规避此问题。

![](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/unnamed-1733280702573.png)

## 3、优化lightning配置文件参数,加速导入。

lightning完整配置文件详见下一章节,这里只介绍加速参数:

region-concurrency :如果一台机器上同时执行2个lightning,需要把此参数调整成机器CPU核数的一半

backend = "local" :物理模式导入速度快

parallel-import = true:多台机器同时用lightning导入,需要设置此参数

data-source-dir = "/DATA1/csvpoc"和sorted-kv-dir = "/DATA2/tidbSORT1":两个目录放在不同磁盘上

analyze = "off" lightning导入完成后不进行analyze table



# lightning配置文件


SQL[root@02 lightning]# cat lightning.toml[lightning]level = “info”file = “tidb-lightning_2024.log”check-requirements = falseregion-concurrency = 30


[tikv-importer]backend = “local”sorted-kv-dir = “/data3/tidbSORT1”parallel-import = true


[conflict]strategy = “replace”precheck-conflict-before-import = falsethreshold = 10000max-record-rows = 100000


[mydumper]data-source-dir = “/data2/csv”filter = [’.’,‘!mysql.’, ‘!sys.’, ‘!INFORMATION_SCHEMA.’,‘!METRICS_SCHEMA.’,‘!INSPECTION_SCHEMA.*‘]no-schema = truestrict-format = true


[tidb]host = “192.168.1.11”port = 4000user = “root”password = “”status-port = 10080pd-addr = “192.168.1.11:2379”


[checkpoint]enable = truedriver = “file”dsn = “/tmp/tidb_lightning_3.pb”


[mydumper.csv]separator=‘,’delimiter=‘“’terminator=”\n”header = falsenot-null = falsenull=”backslash-escape = truetrim-last-separator = false


[post-restore]analyze = “off”```

总结

1、高版本的 lightning 工具,导入速度变快。


2、利用好 lightning 的特性,应对复杂的导数场景。


发布于: 刚刚阅读数: 4
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
Lightning导入单个TB级CSV文件加速方案_迁移_TiDB 社区干货传送门_InfoQ写作社区