2016-02-11 99 views
0

我知道过类似的问题,但我认为我的用例非常具体,我找不到任何答案。Cassandra数据从1.2迁移到3.0.2

在生产中,我们使用Cassandra 1.2和ByteOrderPartitioner在6节点集群中以Priam作为种子管理工具。我们最近升级了所有依赖关系,并试图使用Murmur分区器迁移到Cassandra 3.0.2,为了实现向后兼容性,我们需要启用节点集群。同时我们也希望从Priam迁移出来。 我能够设置新的群集,但在数据迁移过程中遇到很多问题。我试过3两件事:

1)使用拷贝命令:失败时的行数较大

2)SSTable2Json:卡桑德拉3.0.2已停止支持SSTable2Json

3)SSTableloader:失败我想是因为源和目标

了java.lang.RuntimeException的不同版本卡桑德拉:在org.apache.cassandra.tools.BulkLoader $ ExternalClient.init(BulkLoader.java:233) 在组织 :无法检索端点范围。 apache.cassandra.io.sstable.SSTableLoader.stream( SSTableLoader.java:119) at org.apache.cassandra.tools.BulkLoader.main(BulkLoader.java:67) 引起:InvalidRequestException(原因:未配置的表schema_columnfamilies) at org.apache.cassandra.thrift.Cassandra $ (org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78) at org.apache.cassandra.thrift.Cassandra $ Client.recv_execute_cql3_query(Cassandra.java:1562)org.apache.thrift.TServiceClient.receiveBase(Cassandra.java:1578) at org.apache.cassandra.thrift.Cassandra $ Client.execute_cql3_query(Cassandra.java:1547) at org.apache.cassandra.tools.BulkLoader $ ExternalClient.init(BulkLoader.java:225) ... 2 more

Righ现在我有点卡住了,对此的任何帮助将深受赞赏。如果您需要更多详细信息,请告诉我。

回答

1

不,您不能将sstables 直接从1.2升级到3.0.2,因为sstable对于不同的版本会有所不同。这个link描述了升级cassandra版本的步骤。但它也不会帮你,因为你正在改变分区类型。

更改分区类型尚不支持卡桑德拉作为 现在(Link)

其中一个解决方案,我宁愿是的,

创建一个独立的工具,它是卡桑德拉3.0.2版本,从您的源卡桑德拉阅读所有的数据和写入的SSTable 与帮助CQLSSTableWriter与分区类型的Murmur分区程序(诀窍是,您正在编写 版本3.0.2的sstable,因此此sstable将很容易被您的新集群识别为 )。然后使用SSTableLoader在你的目标群


但我不知道为什么你仍然需要向后兼容性,同时创造CQLSSTableWritter你可以用关键字 “紧凑存储”指定列的家庭模式。但我没有用“WITH COMPACT STORAGE”尝试CQLSSTableWritter,但没有“WITH COMPACT STORAGE”我试过了,它也适用于你的情况。

+0

感谢Jaya,我仍在探索两种选择: 1)使用CQLSSTableWriter 2)在新集群中创建模式,编写将一组数据直接复制到另一个集群的Java代码。由于数据并不庞大(大约100GB),我更倾向于第二种选择,因为我已经熟悉在cassandra中写入数据的代码。对此有任何想法。 –

+0

以我的观点来看,第二种方法比第一种方法需要更多的时间。另一个预防措施是使用重试逻辑进行写入过程。因为如果有任何写入失败,出现任何异常,那么您需要从第一个写入过程开始。 –

+0

对于第二个选项,还有一点是,我不确定cassandra是否会处理100GB的所有数据。由于以100GB的速度写入,可能会带来麻烦。从cassandra文档中,它必须处理所有100GB数据,而不会失败。还没有尝试过,但几乎你正在给cassandra做压力测试。但是如果你选择第一种选择,你就不会陷入任何陷阱。如果可能的话,一旦完成就取回结果,这对未来可能有所帮助。 –

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,...)

+0

谢谢@doanduyhai,但这不会工作,好像我只是升级当前版本,我仍然必须使用ByteOrderPartitioner –

+0

一旦你选择了分区器(ByteOrderPartitioner),你就必须永远保持它。更改分区程序的唯一方法是创建一个新集群并使用Spark将所有数据复制到此新集群中 – doanduyhai

+0

对不起,不清楚,但在我的问题中,我提到过我已经用新分区程序创建了一个新集群,现在只有在等待复制数据 –