web-dev-qa-db-fra.com

Erreur lors de la connexion à Cassandra à l'aide du pilote Java pour Apache Cassandra 1.0 à partir de com.example.cassandra

Lors de la connexion au client Cassandra à l'aide du pilote Java pour Cannsandra par DataStax, l'erreur suivante est générée.

Exception dans le fil "principal" com.datastax.driver.core.exceptions.NoHostAvailableException: tous les hôtes essayés pour la requête ont échoué (essayé: [/127.0.0.1])

Veuillez suggérer...

Merci!

Mon code Java est comme ça:

package com.example.cassandra;

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Host;
import com.datastax.driver.core.Metadata;

public class SimpleClient {

private Cluster cluster;

public void connect(String node){

    cluster = Cluster.builder().addContactPoint(node).build();
    Metadata metadata = cluster.getMetadata();
    System.out.println(metadata.getClusterName());
}   


public void close()
{
cluster.shutdown();
}

public static void main(String args[]) {

SimpleClient client = new SimpleClient();
client.connect("127.0.0.1");
client.close();
}
26

Dans mon cas, j'ai rencontré ce problème car j'ai utilisé le port RPC par défaut de 9160 lors de la connexion. On peut trouver un port différent pour CQL dans cassandra.yaml -

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

Une fois que j'ai changé le code pour utiliser le port 9042, la tentative de connexion a réussi - 

public BinaryDriverTest(String cassandraHost, int cassandraPort, String keyspaceName) {
    m_cassandraHost = cassandraHost;
    m_cassandraPort = cassandraPort;
    m_keyspaceName = keyspaceName;

    LOG.info("Connecting to {}:{}...", cassandraHost, cassandraPort);
    cluster = Cluster.builder().withPort(m_cassandraPort).addContactPoint(cassandraHost).build();
    session = cluster.connect(m_keyspaceName);
    LOG.info("Connected.");
}

public static void main(String[] args) {
    BinaryDriverTest bdt = new BinaryDriverTest("127.0.0.1", 9042, "Tutorial");
}
13
Bharadwaj

J'ai eu ce problème et il a été trié en définissant le ReadTimeout dans SocketOptions:

Cluster cluster = Cluster.builder().addContactPoint("localhost").build();
cluster.getConfiguration().getSocketOptions().setReadTimeoutMillis(HIGHER_TIMEOUT);
5
Aneesh Vijendran

J'avais aussi le même problème. J'ai installé Cassandra dans un ordinateur Linux séparé et j'ai essayé de me connecter via Windows. Je n'ai pas été autorisé à créer la connexion.

Mais lorsque nous modifions cassandra.yaml, définissons mon adresse IP linux pc sur adresse_rpc et redémarre, cela me permet de me connecter avec succès,

# The address or interface to bind the Thrift RPC service and native transport
# server to.
#
# Set rpc_address OR rpc_interface, not both. Interfaces must correspond
# to a single address, IP aliasing is not supported.
#
# Leaving rpc_address blank has the same effect as on listen_address
# (i.e. it will be based on the configured hostname of the node).
#
# Note that unlike listen_address, you can specify 0.0.0.0, but you must also
# set broadcast_rpc_address to a value other than 0.0.0.0.
#rpc_address: localhost
rpc_address: 192.168.0.10
4
Prasanna Sujeewa

Accédez à votre répertoire Apache Cassandra conf et activez le protocole binaire.

Protocole binaire Cassandra Le pilote Java utilise le protocole binaire introduit dans Cassandra 1.2. Cela fonctionne uniquement avec une version de Cassandra supérieure ou égale à 1.2. De plus, le serveur de protocole binaire n’est pas démarré avec le fichier de configuration par défaut de Cassandre a 1.2. Vous devez éditer le fichier cassandra.yaml pour chaque noeud:

start_native_transport: true

Puis redémarrez le noeud.

4
Orbita

Il suffit de poster ceci pour les personnes qui pourraient avoir le même problème que moi, quand j'ai reçu ce message d'erreur. En fait, mon arbre de dépendance complexe a généré une ancienne version de com.google.collections, qui cassait le pilote CQL. Le fait de supprimer cette dépendance et de me fier entièrement à la goyave a résolu mon problème.

3
VHristov

J'avais le même problème en testant un nouveau cluster avec un nœud.

Après avoir supprimé cela du constructeur de cluster, j'ai pu me connecter: 

.withLoadBalancingPolicy(new DCAwareRoundRobinPolicy("US_EAST"))

Il était capable de se connecter.

3
Brandon Kearby

J'ai moi aussi rencontré ce problème, qui était dû à une simple erreur dans la déclaration soumise.

session.prepare(null);

De toute évidence, le message d'erreur est trompeur.

2
ernest_k

Dans mon cas, c'était un problème de port que j'avais oublié de mettre à jour

Ancien port RPC est 9160
Le nouveau port binaire est 9042

2
oleksii

Modifier 

/etc/cassandra/cassandra.yaml 

et changer

rpc_address à 0.0.0.0, broadcast_rpc_address et listen_address à l'adresse ip du cluster.

1
Manjunatha H C

En supposant que les configurations par défaut soient en place, vérifiez la compatibilité de la version du pilote. Toutes les versions de pilote ne sont pas compatibles avec toutes les versions de Cassandra, bien qu'elles prétendent être rétro-compatibles. S'il vous plaît voir le lien ci-dessous.

http://docs.datastax.com/fr/developer/Java-driver/3.1/manual/native_protocol/

J'ai rencontré un problème similaire et le changement de version du pilote a résolu mon problème. 

Remarque: Espérons que vous utilisez Maven (ou quelque chose de similaire) pour résoudre les dépendances. Sinon, vous devrez peut-être télécharger de nombreuses dépendances pour les versions supérieures du pilote.

0
Mausam

Vérifiez les points ci-dessous:

i) vérifier l'ip du serveur

ii) vérifier le port d'écoute

iii) la dépendance du client de pile de données doit correspondre à la version du serveur.

À propos du fichier yaml, les dernières versions ont les propriétés suivantes activées:

    start_native_transport: true
    native_transport_port: 9042
0
Sonu