Basics of Hector & Cassandra

10,933

Solution 1

The exception you are getting is,

why:Keyspace apples does not exist

In your code, this line does not actually create the keyspace,

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

As described here, this is the code you need to define your keyspace,

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);

Solution 2

We also have a getting started guide up on the wiki as well which might be of some help.

Share:
10,933

Related videos on Youtube

Henry
Author by

Henry

Tech guy

Updated on June 04, 2022

Comments

  • Henry
    Henry almost 2 years

    I'm working with Cassandra-0.8.2. I am working with the most recent version of Hector & My java version is 1.6.0_26

    I'm very new to Cassandra & Hector.

    What I'm trying to do: 1. connect to an up & running instance of cassandra on a different server. I know it's running b/c I can ssh through my terminal into the server running this Cassandra instance and run the CLI with full functionality. 2. then I want to connect to a keyspace & create a column family and then add a value to that column family through Hector.

    I think my problem is that this running instance of Cassandra on this server might not be configured to get commands that are not local. I think my next step will be to add a local instance of Cassandra on the cpu I'm working on and try to do this locally. What do you think?

    Here's my Java code:

    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"));
    }
    }
    

    My ERROR is:

    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
    

    Thank you in advance for your help.

  • Henry
    Henry almost 13 years
    Thank you for your response. My problem is that the replicationFactor seems to be undefined when I try to run this code. I copied exactly what was written provided here:github.com/rantav/hector/wiki/Getting-started-%285-minu‌​tes%29, with the appropriate name variables changed. Any idea why the "replicationFactor" is undefined? There is nothing else for me to import into this class.
  • sbridges
    sbridges almost 13 years
    you are getting a compiler error? can you add the line int replicationfactor = 1;
  • Henry
    Henry over 12 years
    Thanks I figured out my problem!
  • drewww
    drewww over 11 years
    What is the difference between createKeyspace and createKeyspaceDefinition? Why might you want a Keyspace object instead of a KeyspaceDefinition?