使用Hector API将数据插入新的Cassandra数据库的最简单方法?

使用Hector API将数据插入新的Cassandra数据库的最简单方法?,cassandra,hector,Cassandra,Hector,我在向Cassandra数据库中插入数据时遵循了许多示例,每次我都会遇到关于未配置列族的异常 Exception in thread "main" me.prettyprint.hector.api.exceptions.HInvalidRequestException: InvalidRequestException(why:unconfigured columnfamily TestColumnFamily) at me.prettyprint.cassandra.service.E

我在向Cassandra数据库中插入数据时遵循了许多示例,每次我都会遇到关于未配置列族的异常

Exception in thread "main" me.prettyprint.hector.api.exceptions.HInvalidRequestException: InvalidRequestException(why:unconfigured columnfamily TestColumnFamily)
    at me.prettyprint.cassandra.service.ExceptionsTranslatorImpl.translate(ExceptionsTranslatorImpl.java:45)
    at me.prettyprint.cassandra.connection.HConnectionManager.operateWithFailover(HConnectionManager.java:252)
    at me.prettyprint.cassandra.model.ExecutingKeyspace.doExecuteOperation(ExecutingKeyspace.java:97)
    at me.prettyprint.cassandra.model.MutatorImpl.execute(MutatorImpl.java:243)
    at me.prettyprint.cassandra.model.MutatorImpl.insert(MutatorImpl.java:69)
    at CassandraInterface.main(CassandraInterface.java:101)
Caused by: InvalidRequestException(why:unconfigured columnfamily TestColumnFamily)
    at org.apache.cassandra.thrift.Cassandra$batch_mutate_result.read(Cassandra.java:19477)
    at org.apache.cassandra.thrift.Cassandra$Client.recv_batch_mutate(Cassandra.java:1035)
    at org.apache.cassandra.thrift.Cassandra$Client.batch_mutate(Cassandra.java:1009)
    at me.prettyprint.cassandra.model.MutatorImpl$3.execute(MutatorImpl.java:246)
    at me.prettyprint.cassandra.model.MutatorImpl$3.execute(MutatorImpl.java:243)
    at me.prettyprint.cassandra.service.Operation.executeAndSetResult(Operation.java:103)
    at me.prettyprint.cassandra.connection.HConnectionManager.operateWithFailover(HConnectionManager.java:246)
    ... 4 more
所以我查找了如何配置它们,并找到了

    BasicColumnFamilyDefinition cfdef = new BasicColumnFamilyDefinition();
    cfdef.setKeyspaceName(keyspaceName);
    cfdef.setName(columnFamilyName);
    cfdef.setKeyValidationClass(ComparatorType.UTF8TYPE.getClassName());
    cfdef.setComparatorType(ComparatorType.UTF8TYPE);
这没有配置列族

我发现的所有示例都是没有任何上下文的片段,因此我不知道导入或设置什么。此外,一些示例似乎混合了Hector API v2和原始Hector API,因此当我使用它们时,会出现“未找到类”或“未找到函数”的编译器错误。

长话短说,在尝试将数据插入键空间和列族之前,它们必须存在。您可以在代码中对此进行管理,以检查它们是否存在,使用上面的示例作为参考,或者通过命令行界面进行修改(
cassandracli


希望您现在能够做到这一点,但我就是这样做到的

我有一个cassandra安装(使用1.1.4),假设您已经创建了所有必要的目录:

/var/lib/cassandra
/var/lib/casandra/data
/var/lib/cassnadra/commitlogs
/var/lib/cassandra/saved_caches
我使用以下方法启动它:

bin/cassandra -f
我创建了一个名为schema_create.txt的简单脚本:

创建键空间测试
策略类='org.apache.cassandra.locator.SimpleStrategy' 战略选项:复制系数=1; 使用试验; 创建COLUMNFAMILY TestColumnFamily( userid varchar, 名字叫瓦查尔, 姓瓦查尔, 主键(userid))

然后,您可以从命令行使用cassandra附带的新CQL工具运行此脚本,如下所示:

bin/cqlsh --cql3 < schema_createt.txt
这将在cassandra数据库中插入一行数据,密钥为iamauser,名称为John Smith,您可以使用cqlsh工具进行如上所示的验证

希望这有帮助

bin/cqlsh --cql3 < schema_createt.txt
$bin/cqlsh --cql3
use test;
select * from testcolumnfamily;