Spark-cassandra join:池忙没有可用的连接,队列已达到最大大小256

时间:2017-10-19 10:55:56

标签: apache-spark cassandra spark-cassandra-connector

我正在尝试使用joinWithCassandraTable函数加入数据框。 随着非prod中的小数据集一切顺利,当我们去生产时,由于巨大的数据和与cassandra的其他连接,它已经抛出异常,如下所示。

ERROR [org.apache.spark.executor.Executor] [Executor task launch worker for task 498] - Exception in task 4.0 in stage 8.0 (TID 498)
java.util.concurrent.ExecutionException: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /<host1>:9042 

(com.datastax.driver.core.exceptions.BusyPoolException: [/<host3>] Pool is busy (no available connection and the queue has reached its max size 256)),  Pool is busy (no available connection and the queue has reached its max size 256)),

我们在cassandra连接器1.6中使用相同的代码,它的工作非常好。但是,当我们将spark升级到2.1.1并将cassandra连接器激活到2.0.1时,它已经解决了这些问题。

如果您遇到类似的问题以及解决方案可能是什么,请告诉我。

我们使用的代码:

ourDF.select("joincolumn")
      .rdd
      .map(row => Tuple1(row.getString(0)))
      .joinWithCassandraTable("key_space", "table", AllColumns, SomeColumns("<join_column_from_cassandra>"))

Spark版本:2.1.1 Cassandra连接器版本:2.0.1

此致 作者Srini

1 个答案:

答案 0 :(得分:0)

在spark conf中调整此参数。

spark.cassandra.input.reads_per_sec

https://github.com/datastax/spark-cassandra-connector/blob/master/doc/reference.md#read-tuning-parameters