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

2024-06-02 16:58

本文主要是介绍Cassandra数据迁移-BulkLoad离线工具介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

该工具通过文件流接口快速导入数据到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 | 181000ORCL | 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 writerCQLSSTableWriter.Builder builder = CQLSSTableWriter.builder();// set output directorybuilder.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数据迁移-BulkLoad离线工具介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1024558

相关文章

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

Redis的数据过期策略和数据淘汰策略

《Redis的数据过期策略和数据淘汰策略》本文主要介绍了Redis的数据过期策略和数据淘汰策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录一、数据过期策略1、惰性删除2、定期删除二、数据淘汰策略1、数据淘汰策略概念2、8种数据淘汰策略

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

Python给Excel写入数据的四种方法小结

《Python给Excel写入数据的四种方法小结》本文主要介绍了Python给Excel写入数据的四种方法小结,包含openpyxl库、xlsxwriter库、pandas库和win32com库,具有... 目录1. 使用 openpyxl 库2. 使用 xlsxwriter 库3. 使用 pandas 库

SpringBoot定制JSON响应数据的实现

《SpringBoot定制JSON响应数据的实现》本文主要介绍了SpringBoot定制JSON响应数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录前言一、如何使用@jsonView这个注解?二、应用场景三、实战案例注解方式编程方式总结 前言

Java中基于注解的代码生成工具MapStruct映射使用详解

《Java中基于注解的代码生成工具MapStruct映射使用详解》MapStruct作为一个基于注解的代码生成工具,为我们提供了一种更加优雅、高效的解决方案,本文主要为大家介绍了它的具体使用,感兴趣... 目录介绍优缺点优点缺点核心注解及详细使用语法说明@Mapper@Mapping@Mappings@Co

使用Python在Excel中创建和取消数据分组

《使用Python在Excel中创建和取消数据分组》Excel中的分组是一种通过添加层级结构将相邻行或列组织在一起的功能,当分组完成后,用户可以通过折叠或展开数据组来简化数据视图,这篇博客将介绍如何使... 目录引言使用工具python在Excel中创建行和列分组Python在Excel中创建嵌套分组Pyt

SQL Server数据库迁移到MySQL的完整指南

《SQLServer数据库迁移到MySQL的完整指南》在企业应用开发中,数据库迁移是一个常见的需求,随着业务的发展,企业可能会从SQLServer转向MySQL,原因可能是成本、性能、跨平台兼容性等... 目录一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据二、迁移工具的选择2.1