【问题标题】:How to make zone/dc awareness connection to Cassandra from spark?如何从 spark 建立与 Cassandra 的区域/dc 感知连接?
【发布时间】:2020-01-25 10:58:22
【问题描述】:

我正在使用 spark-sql 2.4.1、spark-cassandra-connector_2.11-2.4.1.jar 和 java8。 当我尝试从遇到的表中获取数据时

java.io.IOException: Failed to write statements to keyspace1.model_vals. The
latest exception was
  An unexpected error occurred server side on cassandra-node1: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: java.lang.RuntimeException: org.apache.cassandra.exceptions.ReadTimeoutException: Operation timed out - received only 0 responses.

那么如何从 spark 代码建立到 Cassandra db 的 zone/dc 感知连接?

YML

现有一个

spring:
  data:
      cassandra:
        keyspace-name: raproduct
        contact-points:
                    - cassandra-node1
                    - cassandra-node2
        port: 9042 

改为

spring:
  data:
      cassandra:
        connection:
          local_dc: southeast-1
        keyspace-name: raproduct
        contact-points:
                    - cassandra-node1
                    - cassandra-node2
        port: 9042 

问题

但它没有反映/应用更改的“local_dc”。 在spring-data中怎么做?

【问题讨论】:

    标签: apache-spark cassandra spring-data datastax-java-driver spring-data-cassandra


    【解决方案1】:

    检查Spark Connector documentationConfiguration Reference - Cassandra Connection Parameters。这似乎可以通过在连接配置中设置spark.cassandra.connection.local_dc 属性来完成:

    val conf = new SparkConf(true)
            .set("spark.cassandra.connection.host", "192.168.1.10")
            .set("spark.cassandra.auth.username", "flynn")            
            .set("spark.cassandra.auth.password", "reindeerFlotilla82")
            .set("spark.cassandra.connection.local_dc", "encom_west1_dc")
    
    val sc = new SparkContext("spark://192.168.1.133:7077", "test", conf)
    

    不确定您的连接配置代码是什么样的,但请尝试设置该 spark.cassandra.connection.local_dc 属性,看看您会得到什么。

    【讨论】:

    • @BdLearner 这取决于LoadBalancingPolicy Spark 使用哪个(在后台)连接到 Cassandra。但通常你是对的,设置“本地”DC 背后的整个想法是防止应用参与任何跨 DC 通信。
    • 是的,它只会与 local_dc 对话。 Connector 有一个特殊的负载均衡策略,它只连接到本地 dc 中的节点。
    • 感谢@RussS!我想知道你是否要跳到这里来。
    • 目前无法在不使用自定义连接工厂和负载平衡策略的情况下回退到另一个 DC
    • @BdLearner 告诉连接器是否应该从 Java 系统属性加载默认值。
    猜你喜欢
    • 2013-06-01
    • 2016-09-02
    • 2018-08-13
    • 2017-01-13
    • 2018-04-03
    • 2017-02-13
    • 2015-07-02
    • 2019-09-13
    • 2021-11-21
    相关资源
    最近更新 更多