Scala 火花连接至cassandra,断开连接故障

Scala 火花连接至cassandra,断开连接故障,scala,apache-spark,cassandra,spark-cassandra-connector,Scala,Apache Spark,Cassandra,Spark Cassandra Connector,这是我的身材 name := "cassandra_test" version := "1.0" scalaVersion := "2.10.6" libraryDependencies ++= Seq("com.databricks" %% "spark-avro" % "2.0.1", "org.apache.spark" %% "spark-sql" % "1.6.0", "org.apache.spark" %% "spark-core" % "1.6.0", "com.datas

这是我的身材

name := "cassandra_test"

version := "1.0"

scalaVersion := "2.10.6"

libraryDependencies ++= Seq("com.databricks" %% "spark-avro" % "2.0.1",
"org.apache.spark" %% "spark-sql" % "1.6.0",
"org.apache.spark" %% "spark-core" % "1.6.0",
"com.datastax.spark" %% "spark-cassandra-connector" % "1.5.0")
我已经安装了Cassandra 3.2(编辑:现在使用2.1.12),我相信yaml的内容是我收集到的正确内容:

rpc_address: 127.0.0.1 (EDIT: now 0.0.0.0)
rpc_port: 9160
start_rpc: true
broadcast_rpc_address: 127.0.0.1
我可以通过
cqlsh
启动会话、创建表、查询等

然而,当我尝试使用火花连接时,我总是得到:

 java.io.IOException: Failed to open native connection to Cassandra at {127.0.0.1}:9160
这些是我的scala代码的内容

import com.datastax.spark.connector._
import org.apache.spark.sql._
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.spark.sql._
import com.datastax.spark.connector._

object cassandra_test{

  def main(args: Array[String]){

    val conf = new SparkConf(true).set("spark.cassandra.connection.host", "127.0.0.1").set("spark.cassandra.connection.port", "9160")
    val sc = new SparkContext("local", "Cassandra Connector Test", conf)
    val rdd = sc.cassandraTable("test", "kv")
    println(rdd.count)
   }
}
我四处寻找答案,但我想我已经涵盖了我所看到的所有可能性。我还尝试将本地主机IP地址替换为实际IP地址。这样我可以通过cqlsh连接,但不能通过spark连接

在设置
conf
时,还尝试将“127.0.0.1”替换为“localhost”,但没有效果

根据该页面,卡桑德拉连接器似乎也是正确的版本

不幸的是,再也不知道该尝试什么了

有什么不对劲吗

=========================================================================

编辑:所以我终于解决了这个问题。首先,我在本地编译了连接器库,以便将其链接为jar文件,并使用以下命令打开:

spark-shell --jars /mnt/spark-cassandra-connector/spark-cassandra-connector/target/scala-2.10/spark-cassandra-connector-assembly-1.6.0-M1-12-gc37bb3c.jar --master local
请注意
--主本地
。这是丢失的重要部分。然后我会在外壳上运行:

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.sql

sc.stop
import com.datastax.spark.connector._
val conf = new SparkConf(true).set("spark.cassandra.connection.host","localhost")
val rdd = sc.cassandraTable("test", "kv")
println(rdd.count)
如果shell命令中没有--master local部分,则该命令将始终失败

在scala代码中,这意味着将
conf
的定义更改为:

val conf = new SparkConf(true).set("spark.cassandra.connection.host", "localhost").setMaster("local")
我也做了这个把戏


我仍然不太明白发生了什么,如果有人愿意解释的话,那就太棒了。

Spark Cassandra连接器不支持Cassandra 3.2。您应该使用较低版本,请参阅其自述文件中的版本兼容性表。

Spark Cassandra连接器不支持Cassandra 3.2。您应该使用较低版本,请参阅其自述文件中的版本兼容性表。

工作代码和非工作代码之间的唯一区别是使用
localhost
而不是
127.0.0.1
spark.cassandra.connection.host
,这应该是问题的根本原因


一个有些不相关的提示:您可以启动带有标志的
spark shell
——packages com.datastax.spark:spark cassandra连接器:1.6.0-M1,以避免自己编译jar。

您的工作代码和非工作代码之间的唯一区别是使用
localhost
而不是
127.0.0.1
spark.cassandra.connection.host
,这应该是问题的根本原因



一个有些不相关的提示:您可以启动带有标志的
spark shell
——packages com.datastax.spark:spark cassandra连接器:1.6.0-M1,以避免自己编译jar。

您可以尝试使用
本地[*]
而不是
本地
主机吗?您的意思是这样的吗val sc=new SparkContext(“local[*]”,“Cassandra Connector Test”,conf)`不幸的是,我得到了相同的错误:(可能尝试将0.0.0.0作为RPC地址,然后重新启动CassandraIt拒绝使用该设置启动):(显然,您可以将其设置为0.0.0.0以外的任何值。如何设置?您可以尝试使用
local[*]
而不是
local
master?你的意思是对的?`val sc=new SparkContext(“local[*]”,“Cassandra Connector Test”,conf)`不幸的是,我遇到了同样的错误:(可能尝试0.0.0作为RPC地址,然后重新启动CassandraIt,拒绝使用该设置启动:(显然,你可以将其设置为0.0.0.0以外的任何设置。怎么办?哦,我明白了,我误读了该图表。我会重新安装并稍后重试,并接受你的答案,谢谢。我也会使用1.5版本的连接器。不确定1.6.0-m1上的状态是什么做了所有更改,但仍然没有运气。我正在使用Cassandra 2.2和Spark 1.6和1.5连接器。非常令人沮丧!是的,在127.0.0.1:9160连接到测试集群时没有问题。
。[cqlsh 4.1.1 | Cassandra 2.1.12 | CQL规范3.1.1 |节俭协议19.39.0]
你能将整个堆栈跟踪复制到你的问题中吗?哦,我明白了,我看错了那张图表。我会重新安装,稍后再试,并接受你的回答,谢谢。我也会使用1.5版本的连接器。不确定1.6.0-m1上的状态是什么。我做了所有更改,仍然没有运气。我正在使用Cassandra 2.2和Spark 1.6以及1.5连接器。非常令人沮丧!是的,在127.0.0.1:9160连接到测试集群时没有问题
。[cqlsh 4.1.1 | Cassandra 2.1.12 | CQL规范3.1.1 |节俭协议19.39.0]
你能将整个堆栈跟踪复制到你的问题中吗?你确定吗,因为我尝试了好几次,直到我尝试了才奏效。在第一个示例中,你也清楚地将master设置为local,所以这不可能。你确定吗,因为我尝试了好几次,直到我尝试了才奏效。你清楚地设置了在第一个例子中,也是从master到local,所以不可能是这样。