cassandra如何分离一个表或者一个keyspace到新集群

cassandra数据迁移有好多种方法,只要你的sstable文件没有丢失,这里只讲述两种常见易用的方式:

第一种方式:copy命令

使用方法:适用于数据量小的情况下。

使用方式:

copy mykeyspace.mytable to ‘/home/db.csv’

这样就成功的把表mytable以csv的格式导出到了db.csv文件。

然后再另外一个集群中,建一个一模一样的表,然后使用

copy app12345.mytable from ‘/home/db.csv’

就把数据导入到了新的库中。

不过以上方式仅限于小数据量,当数据量一大,这个过程会持续很久,而且文件也会很大。

第二种方式:sstableloader工具。

在cassandra的bin目录下提供了一个sstableloader工具,这个工具专门用于把一个表的sstable文件导入到一个新的集群中。

假设你的表是mykeyspace.mytable。你的数据存一个10个节点组成的集群中,每个几点的数据都存在/disk/data1和/disk/data2目录下。

假设你的新集群的一个访问地址是192.168.2.1, 先在新集群建离相同名字的keyspace和表结构。

接下来你只要在老集群的每个节点执行下面的命令:

bin/sstableloader -d 192.168.2.1 -u cassandra -pw cassandra -t 100 /disk/data1/mykeyspace/mytable

bin/sstableloader -d 192.168.2.1 -u cassandra -pw cassandra -t 100 /disk/data2/mykeyspace/mytable

其中-u是 用户名 -pw是密码 -t是限制流量100M/bps

等所有节点执行完毕,你的表数据就成功导入到了新的集群中,当然只要你的机器io和网络条件允许,你可以多个节点并发执行。

  1. Garfield说道:

    cql中没有 alter table oldtable rename to newtable?

  2. Garfield说道:

    一个小问题:
    cql中没有 alter table oldtable rename to newtable?

  3. Garfield说道:

    你好,请教你1个问题。
    1.cql是否有rename table的命令支持。
    如果没有如何模拟实现?
    先谢了!

留言

提示:你的email不会被公布,欢迎留言^_^

*

验证码 *