Памылка пры падключэнні да Касандра з выкарыстаннем Java Driver для Apache Cassandra 1.0 з com.example.cassandra

Пры падключэнні да Касандра кліента з дапамогай драйвера Java для Cannsandra па DataStax, ён кідае наступную памылку ..

<�Моцны> Выключэнне ў патоку "асноўнага" com.datastax.driver.core.exceptions.NoHostAvailableException: Усе хост (ы) спрабаваў для запыту не ўдалося (спрабаваў: [/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();
}
23
Проста каб дадаць больш яснасці: я ўпэўнены, што я падлучаны да Касандра. Тым не менш ён паказвае гэтую памылку
дададзена аўтар Saurabh Deshpande, крыніца

11 адказы

У маім выпадку, я сутыкнуўся з гэтай праблемай, як я выкарыстаў 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");
}
12
дададзена

Я меў гэтае пытанне, і гэта быў адсартаваны, усталяваўшы ReadTimeOut у SocketOptions:

Cluster cluster = Cluster.builder().addContactPoint("localhost").build();
cluster.getConfiguration().getSocketOptions().setReadTimeoutMillis(HIGHER_TIMEOUT);
5
дададзена

Перайдзіце ў каталог конф Apache Cassandra і ўключыць бінарны пратакол

двайковы пратакол Cassandra Драйвер Java выкарыстоўвае двайковы пратакол, які быў уведзены ў Cassandra 1.2. Яна працуе толькі з версіяй Касандры, большай ці роўнай 1,2. Акрамя таго, бінарны сервер пратакола не запускаецца з файлам канфігурацыі па змаўчанні ў 1,2 Касандра. Вы павінны адрэдагаваць файл cassandra.yaml для кожнага вузла:

start_native_transport: true

Затым перазапусціце вузел.

4
дададзена

Я быў таксама мае такую ​​ж праблему. Я усталяваў Касандра ў асобным Linux ПК і паспрабаваў падлучыцца праз акно ПК. Я не дазволіў стварыць злучэнне.

Але калі мы рэдагуемы cassandra.yaml, ўсталяваць мой Лінукс ПК IP-адрас для <�моцны> 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
4
дададзена

Проста адпраўляю гэта для людзей, якія маглі б мець такую ​​ж праблему, як я зрабіў, калі я атрымаў гэта паведамленне пра памылку. Аказалася, што мой комплекс дрэва залежнасцяў прывяло старой версіі com.google.collections, які зламаў драйвер CQL. Выдаленне гэтай залежнасці і цалкам належыць на гуавы вырашыць маю праблему.

3
дададзена
Дзякуй за падказку, гэта вырашыць маю праблему
дададзена аўтар Harsha, крыніца

У мяне быў той жа пытанне тэстуе новы кластар з адным вузлом.

Пасля выдалення гэтага ад забудоўшчыка кластара я змог падключыцца:

.withLoadBalancingPolicy(new DCAwareRoundRobinPolicy("US_EAST"))

Ён быў у стане злучыцца.

3
дададзена

У маім выпадку гэта было пытанне порта, які я забыўся абнавіць

Old RPC port is 9160
New binary port is 9042

2
дададзена

Я таксама сутыкнуўся з гэтай праблемай, і яна была выклікана просты памылкай у зацвярджэнні, што ў цяперашні час прадстаўлены.

session.prepare(null);

Відавочна, што паведамленне пра памылку ўводзіць у зман.

2
дададзена

рэдагаваць

/etc/cassandra/cassandra.yaml 

і змяненне

rpc_address to 0.0.0.0,broadcast_rpc_address and listen_address to ip address of the cluster.

1
дададзена

Праверце ніжэй пунктаў:

я) праверка IP сервера

б) праверка порт праслухоўвання

III) кліент залежнасць дадзеных стэк павінен адпавядаць версіі сервера.

Аб файле YAML, апошнія версіі маюць ніжэй ўласцівасці дазволілі:

    start_native_transport: true
    native_transport_port: 9042
0
дададзена

Калі ў вас ёсць налады па змаўчанні на месцы, праверце сумяшчальнасць версіі драйвера. Не ўсе версіі драйвера сумяшчальныя з усімі версіямі Касандры, хоць яны сцвярджаюць, што зваротная сумяшчальнасць. Калі ласка, глядзіце спасылку ніжэй.

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

I ran into a similar issue & changing the driver version solved my problem.

Заўвага: Будзем спадзявацца, што вы карыстаецеся Maven (ці нешта падобнае) для дазволу залежнасцяў. У адваротным выпадку, магчыма, прыйдзецца загрузіць шмат залежнасцяў для больш новых версій драйвера.

0
дададзена