0

我知道以前有人问过类似的问题,但我认为我的用例非常具体,我找不到任何答案。

在生产中,我们在 6 节点集群中使用 Cassandra 1.2 和 ByteOrderPartitioner,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.io.sstable.SSTableLoader.stream(SSTableLoader. java:119) at org.apache.cassandra.tools.BulkLoader.main(BulkLoader.java:67) 原因:org.apache.cassandra.thrift.Cassandra$execute_cql3_query_result.read(Cassandra .java:37849) 在 org.apache.cassandra.thrift.Cassandra$Client.recv_execute_cql3_query(Cassandra.java:1562) 在 org.apache.cassandra 的 org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78)。 thrift.Cassandra$Client.execute_cql3_query(Cassandra.java:1547) at org.apache.cassandra.tools.BulkLoader$ExternalClient.init(BulkLoader.java:225) ... 还有 2 个

现在我有点卡住了,对此的任何帮助将不胜感激。如果您需要更多详细信息,请告诉我。

4

2 回答 2

1

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

截至目前,cassandra 尚不支持更改分区器类型(链接)

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

创建一个 cassandra 3.0.2 版本的独立实用程序,以读取源 cassandra 中的所有数据并在 CQLSSTableWriter 的帮助下使用Murmur Partitioner 的分区类型写入 sstable(诀窍是,您正在使用版本 3.0.2,因此这个 sstable 将很容易被您的新集群识别)。然后在目标集群中使用 SSTableLoader


但是我不确定为什么您仍然需要向后兼容性,在创建 CQLSSTableWritter 时,您可以使用关键字 "WITH COMPACT STORAGE"指定列族模式。但是我没有尝试使用“WITH COMPACT STORAGE”的 CQLSSTableWritter,但没有尝试过“WITH COMPACT STORAGE”,它也适用于您的情况。

于 2016-02-12T05:38:35.820 回答
0

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

迁移路径应该是

  1. 最新的未成年人或 1.2
  2. 2.0 最新的未成年人
  3. 2.1 最新的未成年人
  4. 3.0.2

对于版本之间的每次跳转,请阅读https://github.com/apache/cassandra/blob/trunk/NEWS.txt文件以了解您是否需要特殊操作(升级 sstable,...)

于 2016-02-12T09:32:16.483 回答