5

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 が混在しているように見えるため、それらを使用すると、「クラスが見つかりません」または「関数が見つかりません」というコンパイラ エラーが発生します。

4

2 に答える 2

3

ヘクター 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) 。

ヘクター単体テスト

于 2012-04-12T20:58:37.027 に答える
1

うまくいけば、これまでにこれを行うことができましたが、これが私が行った方法です。

Cassandra をインストールして (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 KEYSPACE TEST
WITH strategy_class = 'org.apache.cassandra.locator.SimpleStrategy' AND strategy_options:replication_factor='1'; テストを使用します。CREATE COLUMNFAMILY TestColumnFamily( userid varchar, firstname varchar, lastname varchar, PRIMARY KEY (userid));

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

bin/cqlsh --cql3 < schema_createt.txt

これにより、testcolumnfamily という名前の列ファミリーを持つ test という名前のキースペースが cassandra にインストールされます。

Javaアプリケーション内から、mainメソッドを持つテストクラスを簡単に作成できます(mavenを使用している場合、開発環境には必要なすべての依存関係があると仮定します):

試してください{ Mutator mutator = HFactory.createMutator(kweyspace, stringSerializer.get()); mutator.addInsertion("iamauser", "tescolumnfamily", HFactory.createStringColumn("ファーストネーム", "ジョン")); mutator.addInsertion("iamauser", "testcolumnfamily", HFactory.createStringColumn("姓", "スミス")); mutator.execute(); } catch(HectorException Hex){ Hex.printStackTrace(); } 最後に{ cluster.getConnectionManger().shutdown(); }

コマンドラインに戻り、以下を使用して cassandra に入ります。

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

これにより、データの行が cassandra db にキー iamauser で挿入され、John Smith という名前が付けられ、cqlsh ツールを使用して上記のように確認できます。

お役に立てれば。

于 2012-09-21T12:31:57.927 に答える