Lightning 导入单个 TB 级 CSV 文件加速方案
作者: cchouqiang 原文来源:https://tidb.net/blog/a193c892
背景
TiDB 数据库版本为 v8.1.0。
提速方案
1、将 2.6TB 的 csv 切成 256M 左右一个小文件。
使用 split 切分大文件
-l 指定行数切割,防止出现断行数据
-a 切分后有几位数字
计算切分行数:
根据 a.txt 文件的大小,使用 256M 除以 a.txt 文件大小,得出的数值乘以 2000,即切分的行数
例如:a.txt 4M,(256⁄4)*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 的特性,应对复杂的导数场景。
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/338f4a92268ec60b60b4fc20e】。文章转载请联系作者。
评论