Reputation: 2627
I have Cassandra 1.2.11 running on my laptop. I can connect to it using nodetool
and cqlsh
but when I try and use the DataStax 1.0.4 Java API to connect using CQL 3.0 I get the following error:
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)
I am using the following code to connect, taken from the DataStax documentation. I have tried several port number, including leaving the withPort()
call out but nothing seems to work.
Cluster cluster = new Cluster.Builder()
.addContactPoints("localhost")
.withPort(9160)
.build();
Using telnet
I can verify that the Cassandra server is definitely listening at each of the ports I have specified. I have also verified that all the required library jar files are on my classpath as described in the documentation.
Upvotes: 4
Views: 21175
Reputation: 1220
I have the same issue in Ubuntu. I installed recently with the below command which was the datastax guideline
apt-get install cassandra=2.0.11 dsc20=2.0.11-1
before that I used just
apt-get install cassandra
then it makes the same issue for me. I just removed then installed it with the first command (datastax guideline).
P.S. For remove the cassandra use below command
apt-get purge cassandra
Upvotes: 0
Reputation: 360
You also get this error when trying to use an old version of the java driver with a newer cassandra version.
Upvotes: 3
Reputation: 2627
It turns out I missed a section in the documentation.
I was using an old cassandra.yaml
configuration file from an earlier version of Cassandra and it didn't enable the Native Transport binary protocol. The following snippet shows the settings that I needed to change:
# 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
After restarting Cassandra the client was able to connect successfully and run CQL 3.0 commands. Note that the code to create the connection must be changed to use the port specified in the file, like this:
Cluster cluster = new Cluster.Builder()
.addContactPoints("localhost")
.withPort(9042)
.build();
Also, note that from Cassandra 1.2.5 and above, the native transport is enabled by default.
Upvotes: 11