#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 может работать только с узлами в одном центре обработки данных, что произойдет с узлами в других центрах обработки данных?