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

use*_*361 5 cassandra hector

我已经关注了很多关于将数据插入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
Run Code Online (Sandbox Code Playgroud)

所以我查找了如何配置它们并找到了

    BasicColumnFamilyDefinition cfdef = new BasicColumnFamilyDefinition();
    cfdef.setKeyspaceName(keyspaceName);
    cfdef.setName(columnFamilyName);
    cfdef.setKeyValidationClass(ComparatorType.UTF8TYPE.getClassName());
    cfdef.setComparatorType(ComparatorType.UTF8TYPE);
Run Code Online (Sandbox Code Playgroud)

这没有配置列族.

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

sdo*_*lgy 3

Hector CassandraClusterTest.java

 @Test
 public void testAddDropColumnFamily() throws Exception {
      ColumnFamilyDefinition cfDef = HFactory.createColumnFamilyDefinition("Keyspace1", "DynCf");
      cassandraCluster.addColumnFamily(cfDef);
      String cfid2 = cassandraCluster.dropColumnFamily("Keyspace1", "DynCf");
      assertNotNull(cfid2);

      // Let's wait for agreement
      cassandraCluster.addColumnFamily(cfDef, true);
      cfid2 = cassandraCluster.dropColumnFamily("Keyspace1", "DynCf", true);
      assertNotNull(cfid2);
 }
Run Code Online (Sandbox Code Playgroud)

长话短说,在尝试向其中插入数据之前,键空间和列族需要存在。您可以在代码中管理它,检查它们是否存在,使用上面的示例作为一个很好的参考——或者通过命令行界面进行修改(cassandra-cli

赫克托单元测试