2012-04-12 5 views
5

私はCassandraデータベースにデータを挿入する際に数多くの例を追ってきましたが、構成されていない列ファミリに関する例外が発生するたびに、Hector APIを使用して新鮮な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 

だから私は、それらを構成する方法を見上げると、列ファミリを設定しなかった

BasicColumnFamilyDefinition cfdef = new BasicColumnFamilyDefinition(); 
    cfdef.setKeyspaceName(keyspaceName); 
    cfdef.setName(columnFamilyName); 
    cfdef.setKeyValidationClass(ComparatorType.UTF8TYPE.getClassName()); 
    cfdef.setComparatorType(ComparatorType.UTF8TYPE); 

を見つけました。

私が見つけたすべての例は、文脈のない断片なので、インポートするか設定するのか分かりません。さらに、Hector API v2と元のHector APIを混在させているように見えるので、使用すると「クラスが見つかりません」または「関数が見つかりません」というコンパイラエラーが発生します。

答えて

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

かいつまんで、鍵空間とカラムファミリは、あなたがしようと、それらにデータを挿入する前に存在する必要があります。あなたは素敵なリファレンスとして、上記の例を使用して、それらが存在するかどうかを確認するために、あなたのコードでこれを管理することができますどちらか - または(cassandra-cli

Hector Unit Tests

1

うまくいけば、あなたがきたコマンドライン・インタフェースを介して変更しますこれまでにこれを行うことができましたが、これは私がそれをやった方法です。

私は(1.1.4を使用して)カサンドラをインストールする必要があり、あなたが作成したすべての必要なディレクトリを持っていると仮定すると:

/var/lib/cassandra 
/var/lib/casandra/data 
/var/lib/cassnadra/commitlogs 
/var/lib/cassandra/saved_caches 

私はそれを使用して起動します。

bin/cassandra -f 

私はと呼ばれる簡単なスクリプトを作成しますschema_create.txt:

CREATE鍵空間のTEST
strategy_class WITH = 'org.apache.cassandra.locator.SimpleStrategy' AND strategy_options:replication_factor = '1'; テストを使用します。 CREATE COLUMNFAMILY TestColumnFamily( userid varchar、 firstname varchar、 姓varchar、 PRIMARY KEY(userid));

次に、コマンドラインから次のようにカサンドラに付属している新しいCQLツールを使用して、このスクリプトを実行することができます。

bin/cqlsh --cql3 < schema_createt.txt 

これはカサンドラにtestcolumnfamilyという名前の列の家族と一緒にテストという名前のキースペースをインストールします。

試し{ ミューテーターミューテータ=:

Javaアプリケーション内から今

あなたは、単にメインメソッドを持つテストクラスを作成することができます(私はあなたの開発環境は、Mavenを使用している場合、すべての必要な依存関係を持っていると仮定します) HFactory.createMutator(kweyspace、stringSerializer.get()); mutator.addInsertion( "iamauser"、 "tescolumnfamily"、HFactory。createStringColumn( "firstname"、 "John")); mutator.addInsertion( "iamauser"、 "testcolumnfamily"、HFactory.createStringColumn( "lastname"、 "Smith")); mutator.execute(); } catch(HectorException Hex){Hex.printStackTrace(); } finally {cluster.getConnectionManger()。shutdown(); }

コマンドラインに戻って、使用してカサンドラに入る:ジョン・スミスとあなたと

$bin/cqlsh --cql3 
use test; 
select * from testcolumnfamily; 

これはキーiamauserであなたのカサンドラのDBへのデータの行を挿入し、名前上記のようにcqlshツールを使用して検証できます。

これが役に立ちます。

関連する問題