我最近升级到 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 的正确方向,我将不胜感激。
非常感谢,