从com.example.cassandra使用apache cassandra 1.0的java驱动程序连接到cassandra时出错

agxfikkp  于 2021-06-15  发布在  Cassandra
关注(0)|答案(11)|浏览(361)

当通过datastax使用cannsandra的java驱动程序连接到cassandra客户端时,它抛出以下错误。。
线程“main”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();
}
2q5ifsrm

2q5ifsrm1#

我在测试带有一个节点的新集群时遇到了同样的问题。
从cluster builder中删除此项后,我可以连接:

.withLoadBalancingPolicy(new DCAwareRoundRobinPolicy("US_EAST"))

它能够连接。

wpcxdonn

wpcxdonn2#

我遇到了这个问题,它是通过在socketoptions中设置readtimeout来排序的:

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

i1icjdpr3#

检查以下几点:
i) 检查服务器ip
ii)检查监听端口
iii)数据堆栈客户端依赖项必须与服务器版本匹配。
关于yaml文件,最新版本启用了以下属性:

start_native_transport: true
    native_transport_port: 9042
dddzy1tm

dddzy1tm4#

在我的情况下,这是一个端口问题,我忘了更新
旧rpc端口无效 9160 新的二进制端口是 9042

xeufq47z

xeufq47z5#

当我收到错误信息时,我只是为那些可能和我有同样问题的人发布这个。原来我的复杂依赖树带来了com.google.collections的旧版本,它破坏了cql驱动程序。消除这种依赖,完全依靠Guava解决了我的问题。

pu82cl6c

pu82cl6c6#

我也遇到了这个问题,它是由提交的声明中的一个简单错误引起的。

session.prepare(null);

显然,错误消息是误导性的。

o2rvlv0m

o2rvlv0m7#

转到apache cassandra conf目录并启用二进制协议
cassandra二进制协议java驱动程序使用cassandra1.2中引入的二进制协议。它只适用于大于或等于1.2的cassandra版本。此外,二进制协议服务器不是用cassandra1.2中的默认配置文件启动的。必须为每个节点编辑cassandra.yaml文件:

start_native_transport: true

然后重新启动节点。

f0brbegy

f0brbegy8#

我也有同样的问题。我在一台单独的linux pc上安装了cassandra,并尝试通过Windows pc进行连接。我不允许创建连接。
但是当我们编辑cassandra.yaml,将我的linux pc ip地址设置为rpc\u地址并重新启动时,它允许我成功连接,


# 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
xqnpmsa8

xqnpmsa89#

编辑

/etc/cassandra/cassandra.yaml

和改变 rpc_address0.0.0.0 ,广播\u rpc\u地址和侦听\u地址到群集的ip地址。

xam8gpfp

xam8gpfp10#

在我的例子中,我遇到了这个问题,因为我在连接过程中使用了默认的rpc端口9160。您可以在cassandra.yaml中找到不同的cql端口-

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

czfnxgou11#

假设有默认配置,请检查驱动程序版本兼容性。并不是所有的驱动程序版本都与cassandra的所有版本兼容,尽管它们声称向后兼容。请看下面的链接。
http://docs.datastax.com/en/developer/java-driver/3.1/manual/native_protocol/
我遇到了一个类似的问题&更改驱动程序版本解决了我的问题。
注意:希望您使用maven(或类似的东西)来解析依赖关系。否则,您可能需要为更高版本的驱动程序下载大量依赖项。

相关问题