【问题标题】:Basics of Hector & Cassandra赫克托和卡桑德拉的基础知识
【发布时间】:2011-10-20 09:42:42
【问题描述】:

我正在使用 Cassandra-0.8.2。 我正在使用最新版本的 Hector & 我的java版本是1.6.0_26

我对 Cassandra 和 Hector 很陌生。

我正在尝试做的事情: 1. 连接到另一台服务器上启动和运行的 cassandra 实例。我知道它正在运行 b/c 我可以通过我的终端 ssh 进入运行这个 Cassandra 实例的服务器并运行具有完整功能的 CLI。 2. 然后我想连接到一个键空间并创建一个列族,然后通过 Hector 向该列族添加一个值。

我认为我的问题是此服务器上运行的 Cassandra 实例可能未配置为获取非本地命令。我认为我的下一步将是在我正在处理的 cpu 上添加 Cassandra 的本地实例,并尝试在本地执行此操作。你怎么看?

这是我的 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

提前感谢您的帮助。

【问题讨论】:

  • 你注意到Keyspace apples does not exist了吗?

标签: java cassandra hector


【解决方案1】:

你得到的例外是,

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

【讨论】:

  • 感谢您的回复。我的问题是,当我尝试运行此代码时,replicationFactor 似乎未定义。我完全复制了此处提供的内容:github.com/rantav/hector/wiki/Getting-started-%285-minutes%29,并更改了适当的名称变量。知道为什么“replicationFactor”未定义吗?我没有其他东西可以导入这个类。
  • 您遇到编译器错误?你可以添加行 int replicationfactor = 1;
  • 谢谢我发现了我的问题!
  • createKeyspace 和 createKeyspaceDefinition 有什么区别?为什么要使用 Keyspace 对象而不是 KeyspaceDefinition?
【解决方案2】:

我们的 wiki 上也有 a getting started guide,这可能会有所帮助。

【讨论】:

    猜你喜欢
    • 2012-02-23
    • 2012-06-10
    • 2012-07-03
    • 2011-07-03
    • 2012-03-17
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    相关资源
    最近更新 更多