【问题标题】:NoAvailableHostsException cassandra insertNoAvailableHostsException 卡桑德拉插入
【发布时间】:2013-01-16 10:18:18
【问题描述】:

我在将数据写入 cassandra 时遇到问题。

在使用 ConnectionPoolType.BAG 时,我们观察到:

NoAvailableHostsException("No hosts to borrow from") exception being thrown.
Caused by: com.netflix.astyanax.connectionpool.exceptions.NoAvailableHostsException:       
NoAvailableHostsException: [host=None(0.0.0.0):0, latency=0(0), attempts=1]No hosts to borrow from
at com.netflix.astyanax.connectionpool.impl.BagOfConnectionsConnectionPoolImpl.borrowConnection(BagOfConnectionsConnectionPoolImpl.java:93) ~[astyanax-1.56.24-SNAPSHOT.jar:na]
at com.netflix.astyanax.connectionpool.impl.BagOfConnectionsConnectionPoolImpl.access$000(BagOfConnectionsConnectionPoolImpl.java:31) ~[astyanax-1.56.24-SNAPSHOT.jar:na]
at com.netflix.astyanax.connectionpool.impl.BagOfConnectionsConnectionPoolImpl$BagExecuteWithFailover.borrowConnection(BagOfConnectionsConnectionPoolImpl.java:158) ~[astyanax-1.56.24-SNAPSHOT.jar:na]
at com.netflix.astyanax.connectionpool.impl.AbstractExecuteWithFailoverImpl.tryOperation(AbstractExecuteWithFailoverImpl.java:67) ~[astyanax-1.56.24-SNAPSHOT.jar:na]
at com.netflix.astyanax.connectionpool.impl.AbstractHostPartitionConnectionPool.executeWithFailover(AbstractHostPartitionConnectionPool.java:253) ~[astyanax-1.56.24-SNAPSHOT.jar:na]
at com.netflix.astyanax.thrift.ThriftColumnFamilyQueryImpl$6$3.execute(ThriftColumnFamilyQueryImpl.java:739) ~[astyanax-1.56.24-SNAPSHOT.jar:na]

此外,我们尝试使用 ConnectionPoolType.ROUND_ROBIN 但我们再次观察到 ConnectionTimeOut 错误。

想知道我们的配置是否正常?

客户端配置。我们正在使用 Astyanax java 客户端。

        context = new AstyanaxContext.Builder()
                .forCluster("clustername")
                .forKeyspace("keyspace")
                .withAstyanaxConfiguration(new AstyanaxConfigurationImpl()
                        .setDiscoveryType(NodeDiscoveryType.NONE)
                        .setCqlVersion("3.0.0")
                        .setConnectionPoolType(ConnectionPoolType.BAG) // We also tried ConnectionPoolType.ROUND_ROBIN
                )
                .withConnectionPoolConfiguration(
                        new ConnectionPoolConfigurationImpl("poolname")
                                .setPort(9160)
                                .setMaxConnsPerHost(20)
                                .setInitConnsPerHost(10)
                                .setSeeds("host1:9160,host2:9160,host3:9160")
                                .setMaxTimeoutWhenExhausted(11000) // Default : 2000
                                .setConnectTimeout(10000) // Default : 2000
                )
                .withConnectionPoolMonitor(new Slf4jConnectionPoolMonitorImpl())
                .buildKeyspace(ThriftFamilyFactory.getInstance());context.start();

更新:

我在从 play 框架连接到 cassandra 集群时遇到问题。我们正在使用 astyanax java 客户端连接集群。

当我们使用“play start”启动播放应用程序时,一切似乎都运行良好,但是当我们使用“play dist”命令创建一个 dist 并启动服务时,它会引发以下异常。

play dist 和 play start 有什么区别?

更新 2: 我正在我的机器上测试 cassandra 的单个实例。我以“简单策略”为策略创建了键空间。

Cassandra 在我的盒子上:ReleaseVersion:1.1.7。版本 1.1.6 也失败了。

运行 nodetool -h localhost 得到以下输出。

地址 DC 机架状态状态负载有效所有权令牌
127.0.0.1 datacenter1 rack1 Up Normal 130.44 KB 100.00% 129209944818829357072522096381370300409


关闭线程 我的问题是因为一些冲突的旧库。我为 hive 和 cassandra 添加了依赖项,可能存在一些不匹配。

感谢您的帮助。

谢谢。

【问题讨论】:

  • 可以贴一下戒指信息吗?您在定义键空间时使用了哪种策略?还有关于您的 Cassandra 版本的信息
  • 运行nodetool -h host1 ring会得到什么?

标签: playframework cassandra astyanax


【解决方案1】:

我在尝试截断表时遇到了类似的问题 (astyanax.version=1.0.6)。 截断是一个很长的操作,因为首先 Cassandra 会执行 sync,即从内存中刷新所有数据。这是很多数据,所以会发生读取超时。 此问题的一种解决方法是首先调用cassandraClient.send_truncate(),然后重复调用try{cassandraClient.recv_truncate();}。 但是如果抛出超时异常,我们仍然会得到一个“NoAvailableHostsException ... No hosts to borrow from”。该异常的原因是在thrift内部,通过向某个执行程序提交异步作业来关闭连接。补救措施是增加重试之间的时间(1000 毫秒太小,5000 对我有用)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-19
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    相关资源
    最近更新 更多