cassandra全表转储到hdfs

jk9hmnmh  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(530)

我正在尝试使用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)最有效的方法是什么?

ui7jx7zq

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

相关问题