Cassandra全表转储到HDFS

时间:2017-09-04 10:47:14

标签: scala hadoop apache-spark cassandra spark-dataframe

我尝试使用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_msspark.cassandra.connection.timeout_ms和 减少spark.cassandra.input.fetch.size_in_rows没有帮助。同时使用读取一致性级别。

我在桌子上做了一次重大的压缩,但没有任何帮助。 因为这是一个刺激。 DB我无法调整服务器端参数 tombstone_failure_threshold建议here

将Cassandra(v3.7.0)中的完整表加载到HDFS(Hive)的最有效方法是什么?

1 个答案:

答案 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