我知道之前已经提出过类似的问题,但我认为我的用例非常具体,我找不到任何答案。
在生产中,我们在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个
现在我有点卡住,对此的任何帮助都将深表感谢。如果您需要更多详细信息,请与我们联系。
答案 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,那么您真的在寻找麻烦。
迁移路径应为
对于版本之间的每次跳转,请阅读https://github.com/apache/cassandra/blob/trunk/NEWS.txt文件以了解您是否需要特殊操作(升级sstable,...)