Подтвердить что ты не робот

Ошибка при подключении к Cassandra с помощью Java-драйвера для Apache Cassandra 1.0 из com.example.cassandra

При подключении к клиенту Cassandra с помощью java-драйвера для Cannsandra от DataStax он бросает следующую ошибку.

Исключение в потоке "main" com.datastax.driver.core.exceptions.NoHostAvailableException: все хосты (ы), попробованные для запроса, не сработали (try: [/127.0.0.1])

Пожалуйста, предложите...

Спасибо!

Мой код Java выглядит следующим образом:

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();
}
4b9b3361

Ответ 1

В моем случае я столкнулся с этой проблемой, так как я использовал порт RPC по умолчанию 9160 во время соединения. Можно найти другой порт для CQL в cassandra.yaml -

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

Как только я изменил код для использования порта 9042, попытка подключения прошла успешно -

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

Ответ 2

У меня была эта проблема, и она была отсортирована, установив ReadTimeout в SocketOptions:

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

Ответ 3

Перейдите в каталог Apache Cassandra conf и включите двоичный протокол

Двоичный протокол Кассандры Драйвер Java использует двоичный протокол, который был введен в Cassandra 1.2. Он работает только с версией Cassandra, большей или равной 1.2. Кроме того, сервер двоичных протоколов не запускается с конфигурационным файлом по умолчанию в Cassandr a 1.2. Вы должны отредактировать файл cassandra.yaml для каждого node:

start_native_transport: true

Затем перезапустите node.

Ответ 4

У меня тоже была такая же проблема. Я установил Cassandra на отдельном ПК Linux и попытался подключиться через Window pc. Мне не удалось создать соединение.

Но когда мы редактируем файл cassandra.yaml, установите мой ip-адрес linux pc на rpc_address и перезапустите, он позволяет мне успешно подключиться,

# 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

Ответ 5

Просто опубликуйте это для людей, которые могут иметь ту же проблему, что и я, когда я получил это сообщение об ошибке. Оказалось, что мое сложное дерево зависимостей вызвало старую версию com.google.collections, которая сломала драйвер CQL. Удаление этой зависимости и полное использование guava решило мою проблему.

Ответ 6

У меня была такая же проблема с тестированием нового кластера с одним node.

После удаления этого из Cluster builder я смог подключиться:

.withLoadBalancingPolicy(new DCAwareRoundRobinPolicy("US_EAST"))

Он смог подключиться.

Ответ 7

В моем случае это была проблема с портом, которую я забыл обновить

Старый порт RPC 9160
Новый двоичный порт 9042

Ответ 8

Я тоже столкнулся с этой проблемой, и это было вызвано простой ошибкой в ​​заявлении, которое было отправлено.

session.prepare(null);

Очевидно, что сообщение об ошибке вводит в заблуждение.

Ответ 9

Изменить

/etc/cassandra/cassandra.yaml 

и измените

rpc_address до 0.0.0.0, broadcast_rpc_address и listen_address к IP-адресу кластера.

Ответ 10

Проверьте пункты ниже:

i) проверить сервер ip

ii) проверить порт прослушивания

iii) зависимость клиентской базы данных должна соответствовать версии сервера.

В файле yaml последние версии имеют следующие свойства:

    start_native_transport: true
    native_transport_port: 9042

Ответ 11

Предполагая, что у вас установлены конфигурации по умолчанию, проверьте совместимость версий драйверов. Не все версии драйверов совместимы со всеми версиями Cassandra, хотя они требуют обратной совместимости. См. Ссылку ниже.

http://docs.datastax.com/en/developer/java-driver/3.1/manual/native_protocol/

Я столкнулся с подобной проблемой, и изменение версии драйвера решило мою проблему.

Примечание. Надеемся, вы используете Maven (или что-то подобное) для разрешения зависимостей. В противном случае вам может потребоваться загрузить множество зависимостей для более высоких версий драйвера.