Исключительная ситуация при подключении Spark Cassandra для блоков данных: com.datastax.driver.core.exceptions.NoHostAvailableException - PullRequest
1 голос
/ 09 января 2020

Я установил Cassandra DB в Azure Virtual Machine и хочу выполнить операцию чтения / записи через Azure Databricks. Я просматриваю официальную документацию Databricks , документацию , которая не помогает мне в настройке.
Ниже я делюсь подробностями конфигурации моего кода:

%sh
ping -c 2 vmname.westeurope.cloudapp.azure.com

Ответ получен:

PING vmname.westeurope.cloudapp.azure.com (13.69.10.10): 56 data bytes
--- vmname.westeurope.cloudapp.azure.com ping statistics ---
2 packets transmitted, 0 packets received, 100% packet loss
// define the cluster name and cassandra host name
val sparkClusterName = "adbazewdobucluster"
val cassandraHostIP = "vmname.westeurope.cloudapp.azure.com"

dbutils.fs.put(s"/databricks/init/$sparkClusterName/cassandra.sh",
  s"""
     #!/usr/bin/bash
     echo '[driver]."spark.cassandra.connection.host" = "$cassandraHostIP"' >> /home/ubuntu/databricks/common/conf/cassandra.conf
   """.trim, true)

// setting IP of the Cassandra server
spark.conf.set("spark.cassandra.connection.host", "127.0.0.1")

//verify sparkconf is set properly
spark.conf.get("spark.cassandra.connection.host")

и после применения всей конфигурации в spark я пытаюсь извлечь записи из таблицы, находящейся в Cassandra DB, которая вызывает исключение.

val df = sqlContext
  .read
  .format("org.apache.spark.sql.cassandra")
  .options(Map( "table" -> "words_new", "keyspace" -> "test"))
  .load
df.explain

Исключение:

com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /127.0.0.1:9042 (com.datastax.driver.core.exceptions.TransportException: [/127.0.0.1:9042] Cannot connect))

Я проверил, работает ли моя Cassandra DB, и операция чтения / записи работает нормально.
Так что мой вопрос : Правильно ли я применяю конфигурацию? Если нет, то Как мне получить доступ к Cassandra из записной книжки Databricks.
Я использую Scala для платформы Spark, и мои версии кластера и драйвера следующие:

Databricks Runtime Version
6.2 (includes Apache Spark 2.4.4, Scala 2.11)

spark-cassandra-connector
com.datastax.spark:spark-cassandra-connector_2.11:2.4.1

cassandra version: 3.11.4

Ответы [ 2 ]

1 голос
/ 29 января 2020

Если вы работаете на Azure .., убедитесь, что для параметра broadcast_rpc_address установлено значение publi c IP-адрес или имя хоста dns, эти настройки должны работать для вас -

Установить адрес rp c для ip адрес вашего сетевого интерфейса, подключенного к вашей VM..on Windows - интерфейс Hyper V.

rpc_address: <**private ip** of your vm > 

широковещательный rp c адрес для публикации c ip, на этот ip внешние клиенты должны получить ответ с кассандры на порт 9042

broadcast_rpc_address: <**public ip** or hostname.westeurope.cloudapp.azure.com>

прослушивать адрес по умолчанию для localhost / 127.0.0.1

listen_address: **localhost**
0 голосов
/ 10 января 2020

Согласно выводам, которые вы опубликовали, вы получаете NoHostAvailableException, потому что вы подключаетесь к localhost, который недоступен. Это потому, что вы установили хост C* как localhost здесь:

spark.conf.set("spark.cassandra.connection.host", "127.0.0.1")

Вам необходимо установить это значение:

val cassandraHostIP = "vmname.westeurope.cloudapp.azure.com"

Cheers!

...