Databricks Spark Cassandra 连接抛出异常:com.datastax.driver.core.exceptions.NoHostAvailableException
Databricks Spark Cassandra connectivity throwing exception: com.datastax.driver.core.exceptions.NoHostAvailableException
我已经在 Azure 虚拟机中安装了 Cassandra DB,并希望通过 Azure Databricks 执行 read/write 操作。我正在浏览 Databricks 官方 documentation,这对我的配置没有帮助。
我在下面分享我的代码和配置详细信息:
%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 中应用所有配置后,我试图从 table 驻留在 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 数据库 运行 并且 read/write 操作直接正常工作。
所以我的问题是:我是否以正确的方式应用配置?如果不是这样,那么如何从 Databricks 笔记本访问 Cassandra。
我在 Spark 框架中使用 Scala,我的集群和驱动程序版本如下:
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
根据您发布的输出,您正在获得 NoHostAvailableException
,因为您正在连接到无法访问的 localhost
。那是因为您在此处将 C* 主机设置为 localhost
:
spark.conf.set("spark.cassandra.connection.host", "127.0.0.1")
您需要设置为这个值:
val cassandraHostIP = "vmname.westeurope.cloudapp.azure.com"
干杯!
如果您 运行 使用 Azure.. 请确保将 broadcast_rpc_address 设置为 public IP 地址或 dns 主机名 这些设置必须适合您 -
将 rpc 地址设置为连接到 VM 的网络接口的 IP 地址..在 Windows - Hyper V 接口上。
rpc_address: <**private ip** of your vm >
将 rpc 地址广播到 public ip,在此 ip 上,外部客户端应该在端口 9042 上收到来自 cassandra 的响应
broadcast_rpc_address: <**public ip** or hostname.westeurope.cloudapp.azure.com>
监听地址默认为 localhost / 127.0.0.1
listen_address: **localhost**
我已经在 Azure 虚拟机中安装了 Cassandra DB,并希望通过 Azure Databricks 执行 read/write 操作。我正在浏览 Databricks 官方 documentation,这对我的配置没有帮助。
我在下面分享我的代码和配置详细信息:
%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 中应用所有配置后,我试图从 table 驻留在 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 数据库 运行 并且 read/write 操作直接正常工作。
所以我的问题是:我是否以正确的方式应用配置?如果不是这样,那么如何从 Databricks 笔记本访问 Cassandra。
我在 Spark 框架中使用 Scala,我的集群和驱动程序版本如下:
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
根据您发布的输出,您正在获得 NoHostAvailableException
,因为您正在连接到无法访问的 localhost
。那是因为您在此处将 C* 主机设置为 localhost
:
spark.conf.set("spark.cassandra.connection.host", "127.0.0.1")
您需要设置为这个值:
val cassandraHostIP = "vmname.westeurope.cloudapp.azure.com"
干杯!
如果您 运行 使用 Azure.. 请确保将 broadcast_rpc_address 设置为 public IP 地址或 dns 主机名 这些设置必须适合您 -
将 rpc 地址设置为连接到 VM 的网络接口的 IP 地址..在 Windows - Hyper V 接口上。
rpc_address: <**private ip** of your vm >
将 rpc 地址广播到 public ip,在此 ip 上,外部客户端应该在端口 9042 上收到来自 cassandra 的响应
broadcast_rpc_address: <**public ip** or hostname.westeurope.cloudapp.azure.com>
监听地址默认为 localhost / 127.0.0.1
listen_address: **localhost**