我尝试使用Datastax的Spark-Cassandra连接器(v2.0.2,Spark v2.0.0):
val df = sparkSession.sparkContext.cassandraTable[MyRec](keyspace, tableName).toDF()
df.write.format("orc").save(hdfsLocation)
它看起来非常简单并且工作正常一段时间但我开始得到这样的例外:
Caused by: com.datastax.driver.core.exceptions.ReadFailureException:
Cassandra failure during read query at consistency LOCAL_ONE (1
responses were required but only 0 replica responded, 1 failed)
...
at com.datastax.spark.connector.rdd.CassandraTableScanRDD.com$datastax$
spark$connector$rdd$CassandraTableScanRDD$$fetchTokenRange(
CassandraTableScanRDD.scala:342)
增加spark.cassandra.read.timeout_ms
和spark.cassandra.connection.timeout_ms
和
减少spark.cassandra.input.fetch.size_in_rows
没有帮助。同时使用读取一致性级别。
我在桌子上做了一次重大的压缩,但没有任何帮助。
因为这是一个刺激。 DB我无法调整服务器端参数
tombstone_failure_threshold
建议here。
将Cassandra(v3.7.0)中的完整表加载到HDFS(Hive)的最有效方法是什么?
答案 0 :(得分:1)
如果可用性问题,您可以做的最好的事情就是增加重试次数spark.cassandra.query.retry.count
并降低每个读取阈值的页数
spark.cassandra.input.fetch.size_in_rows
基本上,如果这个问题出现在负载中间,那么问题是Cassandra节点正在过载,因此降低吞吐量是解决此问题的唯一方法。
另一种选择是降低执行器核心数spark.cores.max
,这也会降低吞吐量。
https://github.com/datastax/spark-cassandra-connector/blob/master/doc/reference.md