2011-08-04 11 views
8

私はCassandra-0.8.2で作業しています。私はヘクター& の最新版での私のJavaのバージョンを働いている は、私はカサンドラ&ヘクターに非常に新しいです1.6.0_26Hector&Cassandraの基礎

です。

私がやろうとしていること: 1.別のサーバー上のcassandraのインスタンスを実行している&に接続します。私はそれがb/cを実行していることを知っている私はこのカサンドラインスタンスを実行しているサーバーに私の端末を通してsshすることができ、完全な機能を持つCLIを実行します。 2.キー空間に接続したい&列ファミリを作成し、その列ファミリにHectorを使用して値を追加します。

私の問題は、このサーバー上のカッサンドラのこの実行中のインスタンスが、ローカルではないコマンドを取得するように構成されていない可能性があると思います。私は私の次のステップは、私が取り組んでいるCPUにカサンドラのローカルインスタンスを追加し、これをローカルに行うことになると思います。どう思いますか?ここで

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

私のエラーは、次のとおりです。

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 

あなたの助けのために事前にありがとうございます。

+0

あなたは 'Keyspace apples does not exist'に気付きましたか? – Mat

答えて

8

あなたが取得している例外は、あなたのコードで

why:Keyspace apples does not exist 

で、この行は、実際に鍵空間を作成しません、

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

たように、これはあなたが定義する必要があるコードで、hereを説明あなたのキースペース、

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

ありがとうございます。私の問題は、このコードを実行しようとすると、replicationFactorが定義されていないように見えることです。 https://github.com/rantav/hector/wiki/Getting-started-%285-minutes%29に記載されているものを正確にコピーし、適切な名前変数を変更しました。 "replicationFactor"が定義されていない理由は何ですか?私がこのクラスに取り込むことは他にありません。 – Henry

+0

コンパイルエラーが発生していますか?あなたはline int replicationfactor = 1を追加できますか? – sbridges

+0

ありがとう私は私の問題を理解した! – Henry

関連する問題