Как подключиться к нескольким Cassandra в разных dc

#spring-boot #apache-spark #cassandra #spark-cassandra-connector #spring-data-cassandra

#весенняя загрузка #apache-spark #cassandra #spark-cassandra-connector #spring-data-cassandra

Вопрос:

Я настраиваю приложение, в котором я использую сеанс spark для чтения данных из Cassandra. Я могу считывать данные с Cassandra, если я передаю один узел Cassandra из dc. Но как я могу подключиться к 3 разным узлам Cassandra, которые принадлежат 3 разным dc в сеансе spark.

Вот код, который я использую:

сеанс spark

 spark = SparkSession.builder().appName("SparkCassandraApp")
                .config("spark.cassandra.connection.host", cassandraContactPoints)
                .config("spark.cassandra.connection.port", cassandraPort)
                .config("spark.cassandra.auth.username", userName).config("spark.cassandra.auth.password", password)
                .config("spark.dynamicAllocation.enabled", "false").config("spark.shuffle.service.enabled", "false")
                .master("local[4]").getOrCreate();
  

файл свойств :

 spring.data.cassandra.contact-points=cassandra1ofdc1, cassandra2ofdc2, cassandra3ofdc3
spring.data.cassandra.port=9042
  

когда я пробую приведенный выше сценарий, я получаю следующее исключение:
Вызвано:

 java.lang.IllegalArgumentException: requirement failed: Contact points contain multiple data centers: dc1, dc2, dc3
  

Любая помощь будет оценена

Заранее спасибо.

Комментарии:

1. Почему вам нужно использовать узлы из других DC? В новых версиях драйверов используется одно и то же правило в отношении выбора локального DC для всех операций

Ответ №1:

Spark Cassandra Connector (SCC) позволяет использовать только узлы из локального центра обработки данных, либо определенные spark.cassandra.connection.local_dc параметром конфигурации, либо определенные из DC контактной точки (ов) (что выполняется функцией LocalNodeFirstLoadBalancingPolicy.determineDataCenter ). SCC новее будет использовать узлы из других DC…

Комментарии:

1. Если это предполагаемое поведение, как я могу использовать другие центры обработки данных с SCC?

2. Что вы подразумеваете под использованием? чего вы хотите достичь?

3. У меня есть два центра обработки данных Cassandra, и в каждом из них есть 4 узла (каждый из этих узлов также работает как Spark worker) От моего Spark master, когда я отправляю задание, я ожидаю, что будут использоваться все узлы в моих центрах обработки данных. Но если SCC может работать только с узлами в одном центре обработки данных, что произойдет с узлами в других центрах обработки данных?