Cassandra数据迁移-BulkLoad离线工具介绍

简介: 该工具通过文件流接口快速导入数据到cassandra集群,是最快地将线下数据迁移到线上cassandra集群方法之一,准备工作如下 线上cassandra集群 线下数据,sstable格式或者csv格式。

该工具通过文件流接口快速导入数据到cassandra集群,是最快地将线下数据迁移到线上cassandra集群方法之一,准备工作如下

  • 线上cassandra集群
  • 线下数据,sstable格式或者csv格式。
  • 同vpc一台独立的ecs,开放安全组,能访问cassandra集群端口

1. 准备同vpc下客户端ecs

建议独立的ecs,不要和线上cassandra集群混用,混用会影响线上服务。

2. 创建schema

$ cqlsh -f schema.cql  -u USERNAME -p PASSWORD [host]

3. 准备数据

3.1 sstable数据格式

按data/${keyspace}/${table} 格式组织目录,将sstable数据放入目录,如下示例

ls /tmp/quote/historical_prices/
md-1-big-CompressionInfo.db    md-1-big-Data.db        md-1-big-Digest.crc32        md-1-big-Filter.db        md-1-big-Index.db        md-1-big-Statistics.db        md-1-big-Summary.db        md-1-big-TOC.txt

我示例中keyspace为quota,table为historical_prices

导入数据

执行sstableloader,在cassandra发行包bin目录下,指定数据目录 data/${ks}/${table}

${cassandra_home}/bin/sstableloader -d <ip address of the node> data/${ks}/${table}

静等sstable数据导入成功,使用cqlsh检查
bin/cqlsh -u USERNAME -p PASSWORD [host]

$ bin/cqlsh 
cqlsh> select * from quote.historical_prices;

 ticker | date                            | adj_close | close     | high      | low       | open      | volume
--------+---------------------------------+-----------+-----------+-----------+-----------+-----------+--------
   ORCL | 2019-10-29 16:00:00.000000+0000 | 26.160000 | 26.160000 | 26.809999 | 25.629999 | 26.600000 | 181000
   ORCL | 2019-10-28 16:00:00.000000+0000 | 26.559999 | 26.559999 | 26.700001 | 22.600000 | 22.900000 | 555000

如果原表有索引执行,执行bin/nodetool rebuild_index重建索引,具体命令使用参考相关帮助。

3.2 csv数据格式

csv格式数据需要先将csv数据转成sstable格式,cassandra给我们提供了CQLSSTableWriter工具,用于生成生成sstable,其实可以将任意格式数据转化成sstable格式。
因为csv格式也是需要自己预先组织,所以需要自己编写csv格式解析代码,然后编译执行。
该工具使用示例代码如下,完整工具参考git repo

        // Prepare SSTable writer
        CQLSSTableWriter.Builder builder = CQLSSTableWriter.builder();
        // set output directory
        builder.inDirectory(outputDir)
               // set target schema
               .forTable(SCHEMA)
               // set CQL statement to put data
               .using(INSERT_STMT)
               // set partitioner if needed
               // default is Murmur3Partitioner so set if you use different one.
               .withPartitioner(new Murmur3Partitioner());
        CQLSSTableWriter writer = builder.build();
        
        //TODO: 读取csv文件,迭代读取每一行
        while ((line = csvReader.read()) != null)
                {
                    writer.addRow(ticker,
                                  DATE_FORMAT.parse(line.get(0)),
                                  new BigDecimal(line.get(1)),
                                  new BigDecimal(line.get(2)),
                                  new BigDecimal(line.get(3)),
                                  new BigDecimal(line.get(4)),
                                  Long.parseLong(line.get(6)),
                                  new BigDecimal(line.get(5)));
                }
                writer.close();

执行自定义程序生成sstable后,照3.1 章节导入数据。

sstableloader原理介绍

image

sstableloader工具是一个cassandra客户端,集成了datastax driver会拉取cluster tokenMap信息,知道集群partitionKey的sharding情况。整个sstable也是按tokenRange排好序的,在导数据期间,会将文件拆解成不同的tokenRange,以文件流的方式传输到后端的node上。

阅读相关源码,sstableloader也使用了cassandra streamfile接口,这个接口有个明显的可优化点,linux零拷贝技术,目前的实现将sstable中的数据段以对象方式传输到后端node上,涉及了内核层pagecache到用户空间buffer拷贝,我们可以使用mmap技术直接将文件在pagecache层面写到socket fd上,避免了用户态buffer拷贝,减少两次内存拷贝,这被称为linux零拷贝技术。

入群邀约

为了营造一个开放的 Cassandra 技术交流环境,社区建立了微信群公众号和钉钉群,为广大用户提供专业的技术分享及问答,定期开展专家技术直播,欢迎大家加入。另外阿里云提供免费Cassandra试用:https://www.aliyun.com/product/cds
8a55f5a99463a7276265074b1079d74f4ab3d164

相关文章
|
9月前
|
存储 弹性计算 安全
阿里云服务器2核4G收费标准和活动价格参考:u1实例2核4G5M199元,u2a实例504.60元起
现在租用阿里云服务器2核4G配置价格是多少?u1实例2核4G5M带宽有特惠,价格为199元1年,经济型e实例2核4G1M带宽活动价格为599.93元1年起,通用算力型u2a实例2核4G3M带宽的活动价格为648.60元1年,计算型c9a实例2核4G5M带宽活动价格为2938.22元1年起。本文为大家介绍阿里云服务器2核4G配置的实例规格收费标准与最新活动价格情况,以供参考。
1240 1
|
5月前
|
存储 人工智能 安全
【含最新安装包】OpenClaw 2.6.2 Windows11 一键部署完整教程
OpenClaw(小龙虾)是GitHub星标28W+的开源本地AI智能体,支持电脑自动化、文件整理、浏览器操控等。本教程提供Windows 11专属一键部署包(v2.6.2),免代码、免配置、解压即用,10分钟完成安装,全程适配Win11权限、Defender及中文路径问题,数据本地运行,安全可靠。
【含最新安装包】OpenClaw 2.6.2 Windows11 一键部署完整教程
|
机器学习/深度学习 人工智能 自动驾驶
揭秘未来:人工智能如何重塑我们的世界
在本文中,我们将深入探讨人工智能(AI)技术的最新进展及其在未来可能带来的变革。从自动驾驶汽车到智能医疗系统,AI的触角已经伸向了我们生活的每一个角落。我们将通过具体实例和数据,揭示AI如何在提高效率、降低成本、增强安全性等方面发挥巨大作用,并引发读者对未来AI应用的深入思考。
221 28
|
XML JSON 前端开发
前端代码重复度检测
前端代码重复度检测
706 0
|
机器学习/深度学习 人工智能 算法
循环生成网络 CycleGan 原理介绍(一)
循环生成网络 CycleGan 原理介绍(一)
1952 1
循环生成网络 CycleGan 原理介绍(一)
|
存储 机器学习/深度学习 编解码
阿里云服务器内存型r5、r6、r7与r8y实例区别及选择参考
阿里云服务器实例规格经过多次升级之后,目前已经推出了最新的第八代云服务器,如果我们是想购买内存型实例规格的阿里云服务器,主要可选的实例规格有内存型r5、r6、r7和r8y等,其中r7和r8y是目前阿里云活动中主打的内存型云服务器,它们分别属于阿里云的第五代、六代、七代和八代云服务器,每一代云服务器的计算能力、网络收发包及存储与网络能力都比上一代有所提升,下面小编为大家分享一下它们之间具体的区别及选择建议。
|
机器学习/深度学习 自然语言处理
LLM 系列 | 06:ChatGPT Prompt实践:文本摘要
今天这篇小作文主要介绍如何通过构建ChatGPT Prompt以解决「文本摘要」任务。
|
芯片 索引
【数字IC】深入浅出理解I2C协议
【数字IC】深入浅出理解I2C协议
【数字IC】深入浅出理解I2C协议
|
存储 算法 数据格式
Xilinx MCS(HEX)文件格式详解
Xilinx MCS(HEX)文件格式详解
1443 0
Xilinx MCS(HEX)文件格式详解
|
人工智能 算法 Java
五子棋AI进阶:极大极小值搜索
本文将介绍一种提高 AI 思考能力的算法:极大极小值算法。
1044 4

热门文章

最新文章