4

我的笔记本电脑上运行着 Cassandra 1.2.11。我可以使用它连接到它nodetoolcqlsh但是当我尝试使用 DataStax 1.0.4 Java API 使用 CQL 3.0 进行连接时,我收到以下错误:

com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: localhost/127.0.0.1 ([localhost/127.0.0.1] Unexpected error during transport initialization (com.datastax.driver.core.TransportException: [localhost/127.0.0.1] Channel has been closed)))
    at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:186)

我正在使用以下代码进行连接,取自 DataStax 文档。我尝试了几个端口号,包括将withPort()呼叫留在外面,但似乎没有任何效果。

Cluster cluster = new Cluster.Builder()
        .addContactPoints("localhost")
        .withPort(9160)
        .build();

使用telnet我可以验证 Cassandra 服务器是否确实在侦听我指定的每个端口。我还验证了所有必需的库 jar 文件都在我的类路径中,如文档中所述。

4

3 回答 3

11

原来我错过了文档中的一个部分。

我使用的是早期版本的 Cassandra 中的旧cassandra.yaml配置文件,它没有启用本机传输二进制协议。以下代码段显示了我需要更改的设置:

# Whether to start the native transport server.
start_native_transport: true
# port for the CQL native transport to listen for clients on
native_transport_port: 9042 

重新启动 Cassandra 后,客户端能够成功连接并运行 CQL 3.0 命令。请注意,必须将创建连接的代码更改为使用文件中指定的端口,如下所示:

Cluster cluster = new Cluster.Builder()
        .addContactPoints("localhost")
        .withPort(9042)
        .build();

另外,请注意,从Cassandra 1.2.5及更高版本开始,默认启用本机传输。

于 2013-12-05T20:00:25.993 回答
3

尝试将旧版本的 java 驱动程序与较新的 cassandra 版本一起使用时,您也会收到此错误。

于 2014-01-31T17:12:06.577 回答
0

我在 Ubuntu 中有同样的问题。我最近使用以下命令安装了 datastax 指南

apt-get install cassandra=2.0.11 dsc20=2.0.11-1

在那之前我只用过

apt-get 安装 cassandra

然后它对我来说也是同样的问题。我刚刚删除然后使用第一个命令(datastax 指南)安装它。

PS 要删除 cassandra,请使用以下命令

apt-get 清除卡桑德拉

于 2015-12-11T14:40:25.257 回答