Cassandra-Hector InvalidRequestException

时间:2015-03-30 06:00:21

标签: java cassandra hector

我试图根据我发现的内容创建一个Cassandra数据库 here

但无论我做什么,我都会不断收到此错误

  

引起: me.prettyprint.hector.api.exceptions.HInvalidRequestException:InvalidRequestException(为什么:Keyspace名称必须不区分大小写(" myKeyspace"与&#冲突) 34; myKeyspace&#34)

这是我的代码:

public static void setSerializedMap(int index,String serializedVector){
    Cluster cluster = HFactory.getOrCreateCluster("TestCluster", "localhost:9160");

    ColumnFamilyDefinition columnFamilyDefinition=HFactory.createColumnFamilyDefinition("myKeyspace", "user", ComparatorType.BYTESTYPE);
    KeyspaceDefinition keyspaceDefinition=HFactory.createKeyspaceDefinition("myKeyspace",ThriftKsDef.DEF_STRATEGY_CLASS,3,Arrays.asList(columnFamilyDefinition));
    cluster.addKeyspace(keyspaceDefinition,true);

    Keyspace keyspace=HFactory.createKeyspace("Keyspace", cluster);

    Mutator<String> mutator = HFactory.createMutator(keyspace, me.prettyprint.cassandra.serializers.StringSerializer.get());
    try{
        mutator.addInsertion("cluster", "user", HFactory.createStringColumn("cluster-" + index, serializedVector));
    }catch(HectorException e){
        e.printStackTrace();
    }

}

有关如何修复它的任何建议吗?

1 个答案:

答案 0 :(得分:2)

在尝试创建“myKeyspace”之前检查“myKeyspace”是否存在,如果已经存在,则无法创建它。

if (cluster.describeKeyspace("myKeyspace") == null) { ...

虽然在创建时从多个位置/节点调用,但它可能会在您的代码中创建竞争条件。如果可以升级,则在CQL中解决此问题。

如果使用CQL,您可以使用“CREATE KEYSPACE IF NOT EXISTS blarg WITH ...”。虽然如果使用cql可能需要考虑从hector移动到为其设计的库之一。