2012-05-28 2 views
4

나는 카산드라에게 hector가있는 카운터를 사용해야합니다. 카운터 1이 구성되지 않은 때문에, 그는 말한다 insertCounter 라인에헥터/카산드라와 카운터를 설정하는 방법은 무엇입니까?

Mutator<String> m = createMutator(keyspace, se); 
    MutationResult mr = m.insertCounter(// exception here. 
    "k", "Counter1", createCounterColumn("name", 5)); 
    assertTrue("Execution time on single counter insert should be > 0", mr.getExecutionTimeMicro() > 0); 
    assertTrue("Should have operated on a host", mr.getHostUsed() != null); 
    CounterQuery<String, String> counter = new ThriftCounterColumnQuery<String,String>(keyspace, se, se); 
    counter.setColumnFamily("Counter1").setKey("k").setName("name"); 
    assertEquals(new Long(5), counter.execute().get().getValue()); 

그러나 나는이 예외를 얻을 :

me.prettyprint.hector.api.exceptions.HInvalidRequestException: InvalidRequestException(why:unconfigured columnfamily Counter1) 
    at me.prettyprint.cassandra.service.ExceptionsTranslatorImpl.translate(ExceptionsTranslatorImpl.java:45) ~[hector-core-1.0-5.jar:na] 
    at me.prettyprint.cassandra.connection.HConnectionManager.operateWithFailover(HConnectionManager.java:264) ~[hector-core-1.0-5.jar:na] 
    at me.prettyprint.cassandra.model.ExecutingKeyspace.doExecuteOperation(ExecutingKeyspace.java:97) ~[hector-core-1.0-5.jar:na] 
    at me.prettyprint.cassandra.model.MutatorImpl.execute(MutatorImpl.java:243) ~[hector-core-1.0-5.jar:na] 
    at me.prettyprint.cassandra.model.MutatorImpl.insertCounter(MutatorImpl.java:285) ~[hector-core-1.0-5.jar:na] 

OK,하지만 테스트 케이스가 '아무튼 나는 헥터에서 /이 this test case from test code 붙여 복사 카운터 1을 구성 하시겠습니까? 어떻게 구성합니까?

감사합니다.

답변

4

Cassandra 서버에 컬럼 패밀리를 생성합니다. 일반적인 방법 중 하나는 cqlsh 도구를 사용하는 것입니다. 헥터에서

cqlsh 

USE Keyspace1; 
CREATE COLUMNFAMILY counter1 (example text PRIMARY KEY) 
    WITH comparator=text and default_validation=counter; 

, 당신은이 같은 ColumnFamilyDefinition 그 수업 뭔가 사용할 수 있습니다

ColumnFamilyDefinition cfDef = HFactory.createColumnFamilyDefinition(KEYSPACE, "counter1"); 
    cfDef.setKeyValidationClass(ComparatorType.UTF8TYPE.getClassName()); 
    cfDef.setComparatorType(ComparatorType.UTF8TYPE); 
    cfDef.setDefaultValidationClass(ComparatorType.COUNTERTYPE.getClassName()); 
    cfDef.setColumnType(ColumnType.STANDARD); 
    List<ColumnFamilyDefinition> columnFamilies = new ArrayList<ColumnFamilyDefinition>(); 
    columnFamilies.add(cfDef); 
    KeyspaceDefinition ksdef = HFactory.createKeyspaceDefinition(KEYSPACE, "org.apache.cassandra.locator.SimpleStrategy", 1, 
      columnFamilies); 
    cluster.addKeyspace(ksdef); 
+0

감사 phatfingers을,하지만 난 헥터와, 코드 내 모든 물건을하고자한다. hector로 열 패밀리를 작성할 수 있습니까? – Istao

+0

Hector에서 같은 작업을 수행하는 코드를 추가했습니다. – phatfingers

+0

또한 앱에서 CQL을 실행하는 세 번째 방법 인 https://github.com/jsevellec/cassandra-unit/blob/master/src/test/java/org/cassandraunit/DataLoaderAndCQLExecutionTest를 빠르게 살펴볼 수 있습니다. .java – phatfingers