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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 Tair(兼容Redis),内存型 2GB
简介: 该工具通过文件流接口快速导入数据到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

相关文章
|
8月前
|
SQL 分布式计算 Oracle
数据同步工具DataX的安装
数据同步工具DataX的安装
1407 0
|
7月前
|
SQL 存储 关系型数据库
DataX - 全量数据同步工具(2)
DataX - 全量数据同步工具
|
存储 文件存储 对象存储
S3存储服务间数据同步工具Rclone迁移教程
目前大多项目我们都会使用各种存储服务,例如oss、cos、minio等。当然,因各种原因,可能需要在不同存储服务间进行数据迁移工作,所以今天就给大家介绍一个比较通用的数据迁移工具Rclone。
S3存储服务间数据同步工具Rclone迁移教程
|
8月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之环境只能拿到全量数据,无法获取增量数据,是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
3月前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
108 3
|
7月前
|
消息中间件 监控 关系型数据库
Maxwell - 增量数据同步工具(2)
Maxwell - 增量数据同步工具
|
8月前
|
消息中间件 关系型数据库 MySQL
Maxwell 概述、安装、数据同步【一篇搞定】!
Maxwell 是一个由 Zendesk 开源的用于 MySQL 数据库实时数据捕获和同步的工具,支持多种数据库系统,以 JSON 格式输出变更数据。它实时监控数据库中的更新,将变化传递给其他系统,常用于实时数据管道、数据仓库和事件驱动架构。Maxwell 具有实时性、可配置性和高性能等特点。其工作流程包括 Binlog 解析、数据解析、重构、发布到消息队列(如 Kafka)以及事件处理。安装时需注意 JDK 版本,并配置 MySQL、Zookeeper 和 Kafka。此外,Maxwell 支持定向监听特定库表,并能进行历史和增量数据同步。
905 1
|
7月前
|
SQL 关系型数据库 MySQL
Maxwell - 增量数据同步工具(1)
Maxwell - 增量数据同步工具
|
7月前
|
SQL 关系型数据库 MySQL
DataX - 全量数据同步工具(1)
DataX - 全量数据同步工具
|
8月前
|
存储 监控 负载均衡
TiDB数据迁移工具TiCDC:高效同步的引擎
【2月更文挑战第28天】TiCDC是TiDB生态中一款强大的数据迁移工具,它专注于实现TiDB增量数据的实时同步。通过解析上游TiKV的数据变更日志,TiCDC能够将有序的行级变更数据输出到下游系统,确保数据的实时性和一致性。本文将深入探讨TiCDC的原理、架构、应用场景以及使用方式,帮助读者更好地理解和应用这一工具,实现高效的数据迁移和同步。