Не удается подключиться к Cassandra из Spark (точки контакта содержат несколько центров обработки данных)

Я пытаюсь запустить свое первое задание искры (задание Scala, которое обращается к Cassandra), которое терпит неудачу и показывает следующую ошибку:

java.io.IOException: Failed to open native connection to Cassandra at {<ip>}:9042
at com.datastax.spark.connector.cql.CassandraConnector$.com$datastax$spark$connector$cql$CassandraConnector$$createSession(CassandraConnector.scala:164)
at com.datastax.spark.connector.cql.CassandraConnector$$anonfun$2.apply(CassandraConnector.scala:150)
at com.datastax.spark.connector.cql.CassandraConnector$$anonfun$2.apply(CassandraConnector.scala:150)
at com.datastax.spark.connector.cql.RefCountedCache.createNewValueAndKeys(RefCountedCache.scala:31)
...........
............
Caused by: java.lang.IllegalArgumentException: Contact points contain multiple data centers: 
at com.datastax.spark.connector.cql.LocalNodeFirstLoadBalancingPolicy.init(LocalNodeFirstLoadBalancingPolicy.scala:47)
at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1099)
at com.datastax.driver.core.Cluster.getMetadata(Cluster.java:271)
at com.datastax.spark.connector.cql.CassandraConnector$.com$datastax$spark$connector$cql$CassandraConnector$$createSession(CassandraConnector.scala:157)

Что мы здесь делаем неправильно?

Я использую :


person vimeghan    schedule 30.11.2015    source источник
comment
Сколько машин и центров обработки данных находится в вашем кластере C*. Это должно происходить только в том случае, если точки контакта охватывают несколько центров обработки данных, и драйвер не может определить, что такое локальный центр обработки данных. Это помогает соединителю избежать перекрестного трафика постоянного тока.   -  person RussS    schedule 01.12.2015
comment
Спасибо RusS за ответ. У нас есть один центр обработки данных, а у cassandra кластер из 3 узлов. Spark имеет кластер из 4 узлов (работает с узлами данных Hadoop 1-master 3). И искра, и кассандра работают в разных узлах   -  person vimeghan    schedule 01.12.2015
comment
и установили ли вы --conf spark.cassandra.connection.host в качестве одного (или нескольких) узлов C*?   -  person RussS    schedule 01.12.2015
comment
Спасибо Расс за ответ, я думаю, у меня проблема, это должен быть конфликт jar / classpath. Я выполнил пример кода из spark-shell и загрузил jar зависимостей один за другим, код обнаружил кластер и узлы cassandra. Я планирую выполнить те же шаги для работы искры, у которой есть проблема. Я обновлю вас. Спасибо   -  person vimeghan    schedule 02.12.2015
comment
Привет, Расс, проблема связана с обработкой данных облачной платформы Google. Я могу выполнить ту же работу в другом автономном искровом кластере.   -  person vimeghan    schedule 03.12.2015


Ответы (2)


--> По словам автора, работа над исправлением продолжается. Смотрите комментарии под этим ответом.

Я нашел это в документации, я надеюсь, что это поможет вам:

override def init(cluster: Cluster, hosts: JCollection[Host]) {
    nodes = hosts.toSet
    // use explicitly set DC if available, otherwise see if all contact points have same DC
    // if so, use that DC; if not, throw an error
    dcToUse = localDC match { 
      case Some(local) => local
      case None => 
        val dcList = dcs(nodesInTheSameDC(contactPoints, hosts.toSet))
        if (dcList.size == 1) 
            dcList.head
        else 
            throw new IllegalArgumentException(s"Contact points contain multiple data centers: ${dcList.mkString(", ")}")
    }
    clusterMetadata = cluster.getMetadata
}
person Fundhor    schedule 01.12.2015
comment
Спасибо, Fundhor, я уже проверил этот код. если вы внимательно просмотрите строку сообщения об исключении, она не печатает никаких данных, которые ясно показывают, что размер равен 0. У кода возникают проблемы с обнаружением контроллера домена. Как я уже упоминал выше, это кажется проблемой пути к классам. Я пытаюсь проанализировать зависимости. - person vimeghan; 02.12.2015
comment
У меня возникла та же проблема при запуске задания Spark на AWS EMR Cassandra (несколько контроллеров домена). @vimeghan: есть какие-нибудь обновления по этому вопросу? спасибо - person Thinhbk; 30.11.2017
comment
Оказывается, это проблема самого Spark-Cassandra-Connector, int class LocalNodeFirstLoadBalancingPolicy.scala (github.com/datastax/spark-cassandra-connector/blob/master/) . Для решения этой проблемы есть запрос на включение (ссылка: github.com/datastax/spark -cassandra-connector/pull/1140), но этот pull еще не слился. Надеюсь, эта проблема будет исправлена ​​в ближайшее время. - person Thinhbk; 01.12.2017

Я столкнулся с той же проблемой при попытке подключить два центра обработки данных Cassandra с помощью Apache Spark 2.x.x.

public class  SparkCassandraTest {  
  private static final String CASSANDRA_ENDPOINTS = "DC1_node1,DC1_node2,DC1_node3,DC2_node1,DC2_node2,DC2_node3";

  public static void main(String[] args) {
        sparkConf = new SparkConf().setAppName(APP_NAME);
        sparkConf.set("spark.cassandra.connection.host", CASSANDRA_ENDPOINTS);
        sparkConf.set("spark.cassandra.auth.username", CASSANDRA_USERNAME);
        sparkConf.set("spark.cassandra.auth.password", CASSANDRA_PASSWORD);
        sparkSession = SparkSession.builder().config(sparkConf).enableHiveSupport().getOrCreate();

        //.....................
        //.....................
        //.....................
       }
}

Причина: java.lang.IllegalArgumentException: требование не выполнено: контактные точки содержат несколько центров обработки данных: DC2-XXXXX2, DC1-XXXXX1

Я решаю эту проблему, подключая любой центр обработки данных Cassandra (DC1_node1,DC1_node2,DC1_node3) или (DC2_node1, DC2_node2,DC2_node3).

person Prashant Sahoo    schedule 05.07.2018
comment
Saho - Вам удалось найти решение этой проблемы? Я также сталкиваюсь с той же проблемой, и она работает, когда я добавил только один центр обработки данных. - person PIKP; 20.02.2020
comment
Я могу подключить только один центр обработки данных Cassandra, то есть (DC1_node1, DC1_node2, DC1_node3). - person Prashant Sahoo; 20.02.2020
comment
Spark не позволяет подключить несколько центров обработки данных Cassandra. - person Prashant Sahoo; 20.02.2020
comment
Это ограничение Spark? Для меня это кажется большой проблемой. - person PIKP; 20.02.2020