我最近升级到了cassandra版本3.3。我有一个程序,它读取CSV文件并使用CQLSSTableWriter生成SSTable文件。生成这些SSTable文件后,我使用SSTableLoader程序将文件流式传输到cassandra集群。 我编写的程序使用以下maven依赖项:
<groupId>org.apache.cassandra</groupId>
<artifactId>cassandra-all</artifactId>
<version>3.3</version>
我一直在使用Datastax为版本3.3分发cassandra,并且将SSTables从我的机器批量加载到cassandra集群已成功运行。然而,最近我开始使用另一种名为'Stratio Cassandra'的cassandra分布,它支持Lucene索引。
在机器上设置了stratio cassandra之后,我尝试将SSTables批量加载到stratio cassandra集群(使用Datastax目录中的sstableloader.bat程序(例如C:\ Program Files \ DataStax-DDC \ apache-cassandra \ bin) ))。但是我收到以下消息:
flags is not a column defined in this metadata
java.lang.IllegalArgumentException: flags is not a column defined in this metadata
at com.datastax.driver.core.ColumnDefinitions.getAllIdx(ColumnDefinitions.java:272)
at com.datastax.driver.core.ColumnDefinitions.getFirstIdx(ColumnDefinitions.java:278)
at com.datastax.driver.core.ArrayBackedRow.getIndexOf(ArrayBackedRow.java:83)
at com.datastax.driver.core.AbstractGettableData.getSet(AbstractGettableData.java:217)
at org.apache.cassandra.utils.NativeSSTableLoaderClient.createTableMetadata(NativeSSTableLoaderClient.java:172)
at org.apache.cassandra.utils.NativeSSTableLoaderClient.fetchViews(NativeSSTableLoaderClient.java:157)
at org.apache.cassandra.utils.NativeSSTableLoaderClient.init(NativeSSTableLoaderClient.java:93)
at org.apache.cassandra.io.sstable.SSTableLoader.stream(SSTableLoader.java:159)
at org.apache.cassandra.tools.BulkLoader.main(BulkLoader.java:103)
我的表和我的Java代码没有对名为'flags'的列的任何引用,因此我不知道它为什么会产生此错误。
我采用的另一种方法是使用stratio-cassandra发行版中的sstableloader.bat程序。但是我收到另一条错误消息:
Could not retrieve endpoint ranges:
InvalidRequestException(why:unconfigured table schema_columnfamilies)
java.lang.RuntimeException: Could not retrieve endpoint ranges:
at org.apache.cassandra.tools.BulkLoader$ExternalClient.init(BulkLoader.java:338)
at org.apache.cassandra.io.sstable.SSTableLoader.stream(SSTableLoader.java:156)
at org.apache.cassandra.tools.BulkLoader.main(BulkLoader.java:106)
Caused by: InvalidRequestException(why:unconfigured table schema_columnfamilies)
at org.apache.cassandra.thrift.Cassandra$execute_cql3_query_result$execute_cql3_query_resultStandardScheme.read(Cassandra.java:50297)
at org.apache.cassandra.thrift.Cassandra$execute_cql3_query_result$execute_cql3_query_resultStandardScheme.read(Cassandra.java:50274)
at org.apache.cassandra.thrift.Cassandra$execute_cql3_query_result.read(Cassandra.java:50189)
at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78)
at org.apache.cassandra.thrift.Cassandra$Client.recv_execute_cql3_query(Cassandra.java:1734)
at org.apache.cassandra.thrift.Cassandra$Client.execute_cql3_query(Cassandra.java:1719)
at org.apache.cassandra.tools.BulkLoader$ExternalClient.init(BulkLoader.java:317)
... 2 more
总而言之,我可以成功地将数据批量加载到Cassandra 3.3的Datastax发行版中,但是我无法应用将SSTables批量加载到另一个cassandra发行版的相同过程 - 即:Stratio。
我之前没有遇到过这个问题,而且这篇文章的篇幅有限。
如果有人能指点我,请指教我提供任何解决方案,或者指出我如何成功地将SSTables加载到Stratio cassandra上,我将不胜感激。
非常感谢,
答案 0 :(得分:1)
我不知道stratio,但最近修复了CASSANDRA(CASSANDRA-11275)中的一个错误。如果您的架构中有物化视图,则会发生错误。
该修复程序将于3.5发布,将于下个月发布。
此外,第二个例外表明stratio的Cassandra版本与Apache Cassandra 3.0 +不兼容。
异常中有why:unconfigured table schema_columnfamilies
,不再用于Cassandra 3.0+。 (它由system_schema.tables
替换。)