【问题标题】:Datastax spark cassandra connector with RetryPolicy to write DF to cassandra tableDatastax spark cassandra 连接器与 RetryPolicy 将 DF 写入 cassandra 表
【发布时间】:2020-02-12 00:58:41
【问题描述】:

我正在尝试使用一致性级别“EACH_QUORUM”向 cassandra 写入 spark Dataframe。我的代码如下所示:

val sparkBuilder = SparkSession.builder().
  config(cassandraHostPropertyProperty, cassandraHosts).
  config(cassandraAuthUsernameProperty, CASSANDRA_AUTH_USER_KEY).
  config(cassandraAuthPassProperty, CASSANDRA_AUTH_PASS_KEY).
  config(cassandraIsSSLEnabledProperty, isSSLEnabled)...
  getOrCreate();

下面是编写DF的代码:

df.write.cassandraFormat(tableName, keySpaceName)
    .mode(SaveMode.Append)
    .options(Map(
      WriteConf.ParallelismLevelParam.name -> parallelism_Level.toString,
      WriteConf.BatchSizeRowsParam.name -> rowsInBatch.toString
    ))
    .save()

我想添加重试策略,以便如果其中一个数据中心停机,将一致性降级写入 LOCAL_QUORUM。

我知道 datastax 有一个类 MultipleRetryPolicy.scala 我应该扩展它,重写方法以添加自定义逻辑并在 cassandra conf 中使用它的实例。

如何将此策略应用于我的 sparksession 或保存操作?在使用或不使用 RetryPolicy 的情况下,scala 中是否有任何其他方式来满足我的要求?

【问题讨论】:

    标签: scala apache-spark cassandra datastax-java-driver spark-cassandra-connector


    【解决方案1】:

    你不想要MultipleRetryPolicy,你在追求DowngradingConsistencyRetryPolicy,它不是spark驱动程序的一部分,所以除非你将策略移植到scala,否则将其作为驱动程序设置的一部分是不可行的。

    您可以做的是将您的查询执行包装在 try 中并捕获 UnavailableException,然后通过更改 output.consistency.level parameter 以较低的一致性重试。

    【讨论】:

      猜你喜欢
      • 2017-03-04
      • 2015-05-24
      • 2016-08-11
      • 2021-12-10
      • 2019-08-31
      • 2020-10-17
      • 2016-05-25
      • 2015-08-16
      • 2017-02-13
      相关资源
      最近更新 更多