2011-08-04 19 views
8

Estoy trabajando con Cassandra-0.8.2. estoy trabajando con la versión más reciente de Héctor & Mi versión de Java 1.6.0_26 esConceptos básicos de Hector & Cassandra

soy muy nuevo a Cassandra & Héctor.

Lo que estoy tratando de hacer: 1. conectarse a una instancia de & ejecutando de cassandra en un servidor diferente. Sé que se está ejecutando b/c. Puedo enviar mi terminal al servidor que ejecuta esta instancia de Cassandra y ejecutar la CLI con funcionalidad completa. 2. luego quiero conectarme a un espacio de teclado & crear una familia de columnas y luego agregar un valor a esa familia de columnas a través de Hector.

Creo que mi problema es que esta instancia en ejecución de Cassandra en este servidor podría no estar configurada para obtener comandos que no son locales. Creo que mi próximo paso será agregar una instancia local de Cassandra en la CPU en la que estoy trabajando e intentar hacer esto localmente. ¿Qué piensas?

Aquí está mi código Java:

import me.prettyprint.cassandra.serializers.StringSerializer; 
import me.prettyprint.cassandra.service.CassandraHostConfigurator; 
import me.prettyprint.hector.api.Cluster; 
import me.prettyprint.hector.api.Keyspace; 
import me.prettyprint.hector.api.ddl.ColumnFamilyDefinition; 
import me.prettyprint.hector.api.ddl.ComparatorType; 
import me.prettyprint.hector.api.factory.HFactory; 
import me.prettyprint.hector.api.mutation.Mutator; 

    public class MySample { 


     public static void main(String[] args) { 


      Cluster cluster = HFactory.getOrCreateCluster("Test Cluster", "xxx.xxx.x.41:9160"); 
      Keyspace keyspace = HFactory.createKeyspace("apples", cluster); 
      ColumnFamilyDefinition cf = HFactory.createColumnFamilyDefinition("apples","ColumnFamily2",ComparatorType.UTF8TYPE); 
      StringSerializer stringSerializer = StringSerializer.get(); 
      Mutator<String> mutator = HFactory.createMutator(keyspace, stringSerializer); 
      mutator.insert("jsmith", "Standard1", HFactory.createStringColumn("first", "John")); 
} 
} 

Mi error es:

16:22:19,852 INFO CassandraHostRetryService:37 - Downed Host Retry service started with queue size -1 and retry delay 10s 
16:22:20,136 INFO JmxMonitor:54 - Registering JMX me.prettyprint.cassandra.service_Test Cluster:ServiceType=hector,MonitorType=hector 
Exception in thread "main" me.prettyprint.hector.api.exceptions.HInvalidRequestException: InvalidRequestException(why:Keyspace apples does not exist) 
    at me.prettyprint.cassandra.connection.HThriftClient.getCassandra(HThriftClient.java:70) 
    at me.prettyprint.cassandra.connection.HConnectionManager.operateWithFailover(HConnectionManager.java:226) 
    at me.prettyprint.cassandra.service.KeyspaceServiceImpl.operateWithFailover(KeyspaceServiceImpl.java:131) 
    at me.prettyprint.cassandra.service.KeyspaceServiceImpl.batchMutate(KeyspaceServiceImpl.java:102) 
    at me.prettyprint.cassandra.service.KeyspaceServiceImpl.batchMutate(KeyspaceServiceImpl.java:108) 
    at me.prettyprint.cassandra.model.MutatorImpl$3.doInKeyspace(MutatorImpl.java:222) 
    at me.prettyprint.cassandra.model.MutatorImpl$3.doInKeyspace(MutatorImpl.java:219) 
    at me.prettyprint.cassandra.model.KeyspaceOperationCallback.doInKeyspaceAndMeasure(KeyspaceOperationCallback.java:20) 
    at me.prettyprint.cassandra.model.ExecutingKeyspace.doExecute(ExecutingKeyspace.java:85) 
    at me.prettyprint.cassandra.model.MutatorImpl.execute(MutatorImpl.java:219) 
    at me.prettyprint.cassandra.model.MutatorImpl.insert(MutatorImpl.java:59) 
    at org.cassandra.examples.MySample.main(MySample.java:25) 
Caused by: InvalidRequestException(why:Keyspace apples does not exist) 
    at org.apache.cassandra.thrift.Cassandra$set_keyspace_result.read(Cassandra.java:5302) 
    at org.apache.cassandra.thrift.Cassandra$Client.recv_set_keyspace(Cassandra.java:481) 
    at org.apache.cassandra.thrift.Cassandra$Client.set_keyspace(Cassandra.java:456) 
    at me.prettyprint.cassandra.connection.HThriftClient.getCassandra(HThriftClient.java:68) 
    ... 11 more 

Gracias de antemano por su ayuda.

+0

¿Notaste que 'manzanas Keyspace no existe' ?. – Mat

Respuesta

8

La excepción que está recibiendo es,

why:Keyspace apples does not exist 

En su código, esta línea no crea realmente el espacio de claves,

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

Como se describe here, este es el código que necesita para definir el espacio de claves,

ColumnFamilyDefinition cfDef = HFactory.createColumnFamilyDefinition("MyKeyspace", "ColumnFamilyName", ComparatorType.BYTESTYPE); 

KeyspaceDefinition newKeyspace = HFactory.createKeyspaceDefinition("MyKeyspace", ThriftKsDef.DEF_STRATEGY_CLASS, replicationFactor, Arrays.asList(cfDef)); 

// Add the schema to the cluster. 
// "true" as the second param means that Hector will block until all nodes see the change. 
cluster.addKeyspace(newKeyspace, true); 
+0

Gracias por su respuesta. Mi problema es que replicationFactor parece estar indefinido cuando trato de ejecutar este código. Copié exactamente lo que estaba escrito aquí: https: //github.com/rantav/hector/wiki/Getting-started-%285-minutes%29, con las variables de nombre apropiadas modificadas. ¿Alguna idea de por qué el "replicationFactor" no está definido? No hay nada más que pueda importar a esta clase. – Henry

+0

¿está obteniendo un error de compilación? puede agregar la línea int replicationfactor = 1; – sbridges

+0

¡Gracias, descubrí mi problema! – Henry

Cuestiones relacionadas