4

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

集群信息:
Cassandra 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。虽然我想找到这个错误的根本原因。另外,如何以及从哪里设置/获取 "SocketOptions.setReadTimeout",因为这个超时限制必须大于 Cassandra 请求超时按照标准指南并避免可能的错误.

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

4

1 回答 1

7

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

直接来自文档

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

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

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

或在大于或等于 1.2.0 的 Spark Cassandra 连接器版本中设置

spark.cassandra.output.throughput_mb_per_sec

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

你不应该使用 BATCHES

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

设置读取超时

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

于 2015-09-10T16:14:05.807 回答