我正在尝试使用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
没用。还玩了读一致性级别。
我在table上做了一个大的压缩,但没用。因为这是一个prod.db,我不能像这样调整服务器端参数 tombstone_failure_threshold
正如这里所建议的。
将完整表从cassandra(v3.7.0)加载到hdfs(hive)最有效的方法是什么?
1条答案
按热度按时间ui7jx7zq1#
如果是可用性问题,最好的办法就是增加重试次数
spark.cassandra.query.retry.count
并降低每读页面数阈值spark.cassandra.input.fetch.size_in_rows
基本上,如果这是在负载中间出现的,那么问题是cassandra节点过载,因此降低吞吐量是解决此问题的唯一方法。另一个选择是减少executor核心的数量
spark.cores.max
这也会降低吞吐量。https://github.com/datastax/spark-cassandra-connector/blob/master/doc/reference.md