databricks spark cassandra connectivity抛出异常:com.datastax.driver.core.exceptions.nohostavailableexception

6xfqseft  于 2021-06-10  发布在  Cassandra
关注(0)|答案(2)|浏览(502)

我已经在azure虚拟机中安装了cassandra db,并希望通过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中应用了所有配置之后,我试图从cassandradb中驻留的表中检索记录,这将引发异常。

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数据库正在运行和读/写操作工作正常直接。
所以我的问题是:我是否以正确的方式应用了配置?如果不是这样,那么如何从databricks笔记本访问cassandra。
我将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
kokeuurv

kokeuurv1#

如果你在azure上运行。。确保将broadcast\u rpc\u address设置为public ip address或dns hostname这些设置必须适用于您-
将rpc地址设置为连接到vm的网络接口的ip地址..在windows-hyper v接口上。

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

将rpc地址广播到公共ip,在此ip上,外部客户端应在端口9042上从cassandra获得响应

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

作为localhost/127.0.0.1的默认侦听地址

listen_address:**localhost**
lsmepo6l

lsmepo6l2#

根据你发布的结果,你得到了 NoHostAvailableException 因为你正在连接到 localhost 无法访问。那是因为你把c*主机设置为 localhost 在这里:

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

您需要将其设置为以下值:

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

干杯!

相关问题