将Spark RDD保存到Cassandra时出错

时间:2015-01-08 05:42:04

标签: apache-spark cassandra-2.0 datastax

我们正在尝试保存我们的RDD,这将有近40亿行到Cassandra。虽然有些数据会被持久化,但对于某些分区,我们会在spark日志中看到这些错误日志。

我们已经为cassandra连接器设置了这两个属性。我们需要做一些其他的优化吗?读者的推荐设置是什么?我们将它们保留为默认值。

spark.cassandra.output.batch.size.rows = 1

spark.cassandra.output.concurrent.writes = 1

我们正在运行spark-1.1.0和spark-cassandra-connector-java_2.10 v 2.1.0

15/01/08 05:32:44 ERROR QueryExecutor: Failed to execute: com.datastax.driver.core.BoundStatement@3f480b4e
com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /10.87.33.133:9042 (com.datastax.driver.core.exceptions.DriverException: Timed out waiting for server response))
    at com.datastax.driver.core.RequestHandler.sendRequest(RequestHandler.java:108)
    at com.datastax.driver.core.RequestHandler$1.run(RequestHandler.java:179)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

由于

ANKUR

2 个答案:

答案 0 :(得分:1)

我在我的四节点集群中看到了类似的东西。似乎如果我在spark设置中指定了每个cassandra节点名称,那么它可以工作,但是如果我只指定种子(四个,两个是种子)而不是我得到完全相同的问题。我没有跟进它,因为指定所有四个就完成了工作(但我打算在某个时候)。我使用主机名作为种子值,而不是使用ips。并在spark cassandra设置中使用主机名。我确实听说这可能是由于一些akka dns问题。也许尝试通过或通过使用IP地址,或指定所有主机。后者对我来说是完美无缺的。

答案 1 :(得分:0)

我意识到,我正在使用spark.cassandra.output.concurrent.writes = 2运行应用程序。我把它改为1,没有例外。例外情况是因为Spark生成的数据频率比我们的Cassandra集群可以编写的频率高得多,所以将设置更改为1对我们有效。

谢谢!