博客
关于我
Cassandra数据迁移-BulkLoad离线工具介绍
阅读量:798 次
发布时间:2023-04-02

本文共 1996 字,大约阅读时间需要 6 分钟。

快速将线下数据迁移到线上Cassandra集群的方法

通过文件流接口快速导入数据到Cassandra集群,是将线下数据迁移到线上Cassandra集群的高效方法之一。以下是准备工作的详细步骤。

准备工作包括以下几个方面:

  • 线上Cassandra集群
  • 线下数据,支持sstable格式或csv格式
  • 在同一VPC内使用独立的ECS,需开放安全组以访问Cassandra集群的端口

1. 准备同一VPC内的独立ECS

建议使用独立的ECS实例,避免与线上Cassandra集群共用,否则可能会影响线上服务的正常运行。

2. 创建Cassandra Schema

使用CQLSH工具创建schema,命令示例如下:

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

3. 准备数据

3.1 sstable数据格式

sstable数据应按以下目录结构组织:

data/${keyspace}/${table}/    ├── 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"。

3.2 csv数据格式

对于csv数据,需要先将其转换为sstable格式。Cassandra提供了CQLSSTableWriter工具,用于生成sstable文件。以下是使用该工具的示例代码:

// 准备sstable写入器CQLSSTableWriter.Builder builder = CQLSSTableWriter.builder();builder.inDirectory(outputDir)    .forTable(SCHEMA)    .using(INSERT_STMT)    .withPartitioner(new Murmur3Partitioner());CQLSSTableWriter writer = builder.build();// 读取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步骤导入数据。

4. 导入数据

使用sstableloader工具将数据导入Cassandra集群。命令格式如下:

${cassandra_home}/bin/sstableloader -d         data/${ks}/${table}

5. sstableloader原理介绍

sstableloader是一个Cassandra客户端工具,集成了DataStax Driver,用于拉取集群的tokenMap信息,了解partition key的sharding情况。sstable文件按tokenRange排序,导数据时会将文件拆解为不同tokenRange,采用文件流方式传输到后端节点。

sstableloader还使用了Cassandra的streamfile接口,通过linux零拷贝技术减少数据传输开销。该技术利用mmap直接将文件在pagecache层面写到socket fd上,避免了用户态buffer的双重拷贝。

检查导入结果

完成数据导入后,使用CQLSH检查数据是否已成功导入:

$ bin/cqlsh -u USERNAME -p PASSWORD [host]

执行上述命令后,可看到导入的数据。如数据表有索引,需执行:

bin/nodetool rebuild_index

重建索引,具体命令可参考相关文档。

转载地址:http://vmefk.baihongyu.com/

你可能感兴趣的文章
ORA-01795: 列表中的最大表达式数为 1000
查看>>
ORA-06575: 程序包或函数 NO_VM_DROP_PROC 处于无效状态
查看>>
ora-12541:tns:no listener
查看>>
【docker知识】联合文件系统(unionFS)原理
查看>>
ORACEL学习--理解over()函数
查看>>
oracle 10g crs命令,Oracle 10g CRS安装问题解决一例
查看>>
oracle 10g的安装配置
查看>>
Oracle 11.2.0.4 x64 RAC修改public/private/vip/scan地址
查看>>
Oracle 11G INDEX FULL SCAN 和 INDEX FAST FULL SCAN 对比分析
查看>>
Oracle 11g 使用RMAN备份数据库
查看>>
Oracle 11g 单实例安装文档
查看>>
Oracle 11gR2学习之二(创建数据库及OEM管理篇)
查看>>
Oracle 11g中的snapshot standby特性
查看>>
Oracle 11g忘记sys、system、scott密码该这样修改!
查看>>
Oracle 11g数据库安装和卸载教程
查看>>
Oracle 11g超详细安装步骤
查看>>
Oracle BEQ方式连接配置
查看>>
ORACLE Bug 4431215 引发的血案—原因分析篇
查看>>
oracle dblink 创建使用 垮库转移数据
查看>>
oracle dblink结合同义词的用法 PLS-00352:无法访问另一数据库
查看>>