Cassandra数据从1.2迁移到3.0.2

时间:2016-02-11 18:37:08

标签: cassandra migration etl data-migration cassandra-3.0

我知道之前已经提出过类似的问题,但我认为我的用例非常具体,我找不到任何答案。

在生产中,我们在6节点集群中使用带有ByteOrderPartitioner的Cassandra 1.2,其中Priam作为种子管理工具。我们最近升级了所有依赖项并尝试使用Murmur Partitioner迁移到Cassandra 3.0.2,为了向后兼容,我们需要在新集群上启用thrift。同时我们也希望从Priam迁移。 我能够设置新的集群,但在数据迁移过程中遇到了很多问题。我尝试了3件事:

1)使用复制命令:当行数很大时失败

2)SSTable2Json:Cassandra 3.0.2已停止支持SSTable2Json

3)SSTableloader:由于源和目标的cassandra版本不同而我认为失败

java.lang.RuntimeException:无法检索端点范围:     在org.apache.cassandra.tools.BulkLoader $ ExternalClient.init(BulkLoader.java:233)     在org.apache.cassandra.io.sstable.SSTableLoader.stream(SSTableLoader.java:119)     在org.apache.cassandra.tools.BulkLoader.main(BulkLoader.java:67) 引起:InvalidRequestException(why:unconfigured table schema_columnfamilies)     在org.apache.cassandra.thrift.Cassandra $ execute_cql3_query_result.read(Cassandra.java:37849)     在org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78)     在org.apache.cassandra.thrift.Cassandra $ Client.recv_execute_cql3_query(Cassandra.java:1562)     在org.apache.cassandra.thrift.Cassandra $ Client.execute_cql3_query(Cassandra.java:1547)     在org.apache.cassandra.tools.BulkLoader $ ExternalClient.init(BulkLoader.java:225)     ......还有2个

现在我有点卡住,对此的任何帮助都将深表感谢。如果您需要更多详细信息,请与我们联系。

2 个答案:

答案 0 :(得分:1)

不,您不能直接将sstables 从1.2升级到3.0.2 ,因为不同版本的sstable会有所不同。此link描述了升级cassandra版本的步骤。但它也对您没有帮助,因为您正在对分区程序类型进行更改。

  

cassandra尚不支持更改分区程序类型   现在(Link)

我更喜欢的解决方案之一是

  

创建一个独立的实用程序,它是cassandra 3.0.2版本,用于读取来自cassandra的所有数据并写入sstable   在CQLSSTableWriter的帮助下,Murmur Partitioner的分区类型(诀窍是,你在写   版本3.0.2的sstable,所以这个sstable很容易   你的新集群认可的)。然后在目标集群中使用SSTableLoader

但是我不确定为什么你仍然需要向后兼容性,在创建CQLSSTableWritter时你可以用关键字指定列族模式 "具有紧凑的存储" 。但我没有尝试使用"使用紧凑型存储"但没有"使用紧凑存储"我试过了,它也适合你的情况。

答案 1 :(得分:0)

好的,如果您尝试直接从1.2迁移到3.0.2,那么您真的在寻找麻烦。

迁移路径应为

  1. 最新未成年人或1.2
  2. 2.0最新未成年人
  3. 2.1最新未成年人
  4. 3.0.2
  5. 对于版本之间的每次跳转,请阅读https://github.com/apache/cassandra/blob/trunk/NEWS.txt文件以了解您是否需要特殊操作(升级sstable,...)