首页 文章

NoHostAvailableException在从Cassandra读取数据时发现

提问于
浏览
0

我正在使用Cassandra 2.1.5和Cassandra-java-driver 2.0.10 . 当我从Cassandra Table获取数据时,我面临异常 .

com.datastax.driver.core.exceptions.NoHostAvailableException:尝试查询的所有主机都失败了(尝试:/127.0.0.1:9042(com.datastax.driver.core.TransportException:[/127.0.0.1:9042] Connection已关闭))com.datastax.driver.core.exceptions.NoHostAvailableException.copy(NoHostAvailableException.java:84)com.datastax的com.datastax.driver.core.DefaultResultSetFuture.extractCauseFromExecutionException(DefaultResultSetFuture.java:265) . driver.core.DefaultResultSetFuture.getUninterruptibly(DefaultResultSetFuture.java:179)at com.datastax.driver.core.AbstractSession.execute(AbstractSession.java:52)at com.datastax.driver.core.AbstractSession.execute(AbstractSession.java: 36)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)at java.lang.reflect.Method.invoke(Unknown)来自com.datastax.spark.connector.cql.SessionProxy.invoke(会话Proxy.scala:33)com.sex.proxy . $ Proxy8.execute(未知来源)com.exportstagging.SparkTest.ProductDataLoader.dbQuery(ProductDataLoader.java:418)com.exportstagging.SparkTest.ProductDataLoader.main(ProductDataLoader) .java:442)引起:com.datastax.driver.core.exceptions.NoHostAvailableException:所有尝试查询的主机都失败了(尝试:/127.0.0.1:9042(com.datastax.driver.core.TransportException:[ /127.0.0.1:9042]连接已关闭))com.datastax.driver.core.RequestHandler.reportNoMoreHosts(RequestHandler.java:216)com.datastax.driver.core.RequestHandler.access $ 900(RequestHandler.java: 45)at com.datastax.driver.core.RequestHandler $ SpeculativeExecution.sendRequest(RequestHandler.java:276)at com.datastax.driver.core.RequestHandler $ SpeculativeExecution $ 1.run(RequestHandler.java:374)at java.util . java.lang.Thread.run上的java.util.concurrent.ThreadPoolExecutor $ Worker.run(未知来源)的concurrent.ThreadPoolExecutor.runWorker(未知来源)(未知来源)

在我的cassandra表中有50000列和380000行 . 当我解雇这个查询时,我遇到了错误 .

从mykeyspace.productdata中选择*其中id In(1,...,6000) .

我已经使用令牌来创建从Cassandra获取数据的批处理 .

1 回答

  • 1

    试图一次完成6000个分区,在380000行和一个50000列的表上似乎完全矫枉过正 .

    应使用异步查询完成多分区选择,每个分区使用一个查询 . 在表中有50000列看起来像数据建模问题 . 你的用例是什么?不需要一次获取380000行(并且需要很长时间),它看起来像一个分析查询,应该通过Spark更好地处理 .

    试图一次获取这么多数据,你最有可能在你的cassandra节点上获得一个OOM,这可以解释为什么你收到消息“连接已经关闭”

    我的建议是检查您的模型,并尝试以您应该的方式分割负载(异步查询)并使用正确的分页 . 如果你想同时处理如此多的数据,你必须通过批量处理使用Spark,在另一个cassandra表中输出结果,并通过更小,更快的交互式查询访问结果表 .

相关问题