尝试查询的所有主机均失败 - com.datastax.driver.core.OperationTimedOutException

All host(s) tried for query failed - com.datastax.driver.core.OperationTimedOutException

在使用 spark 作业执行 Cassandra 操作(批量执行 - 在两个表上插入和更新操作)时,我得到“所有主机尝试查询失败 - com.datastax.driver.core .OperationTimedOutException”错误。

集群信息:
卡桑德拉 2.1.8.621 | DSE 4.7.1
spark-cassandra-connector-java_2.10 版本 - 1.2.0-rc1 | cassandra-driver-core 版本 - 2.1.7
Spark 1.2.1 | Hadoop 2.7.1 => 3 个节点
Cassandra 2.1.8 => 5 个节点
每个节点有 28 GB 内存和 24 个内核

在搜索它的解决方案时,我遇到了一些讨论,其中说你应该不使用 BATCHES。虽然我想找到这个 error.Also 的根本原因,但如何以及从哪里到 set/get "SocketOptions. setReadTimeout",因为这个超时限制必须更大比 Cassandra 根据标准指南请求超时并避免可能的错误。

就是request_timeout_in_ms和SocketOptions。 setReadTimeout 一样吗?谁能帮我解决这个问题?

While performing Cassandra operations (Batch execution- insert and update operations on two tables) using spark job I am getting "All host(s) tried for query failed - com. datastax. driver. core. OperationTimedOutException" error.

直接来自 docs:

为什么我的写入任务超时/失败?

最常见的原因是 Spark 发出写入请求的速度比 Cassandra 处理它们的速度快得多。这可能会导致 GC 问题和提示的累积。如果您的应用程序属于这种情况,请尝试使用以下选项降低并发写入数和当前批处理大小。

spark.cassandra.output.batch.size.rows spark.cassandra.output.concurrent.writes

或在 Spark Cassandra Connector 大于或等于 1.2.0 的版本中设置

spark.cassandra.output.throughput_mb_per_sec

这将允许您控制每秒每个 Spark 内核写入 C* 的数据量。

you should not use BATCHES

这并不总是正确的,连接器使用本地令牌感知批处理来加快读写速度,但这在自定义应用程序中很难做到正确。在许多情况下,异步查询更好或同样好。

setReadTimeout

这是一个 DataStax java 驱动程序 method。连接器会为您解决这个问题,无需更改。