这是我build.sbt火花连接卡桑德拉,失败运开连接
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")
,我已经安装了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
这些都是
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)
}
}
我环顾四周,寻找答案,但我的我的Scala代码内容认为我已经涵盖了我见过的所有可能性。我也尝试替换实际IP地址的本地主机IP地址。这样做可以通过cqlsh连接,但不能通过spark。
还试图在设置conf
时将“127.0.0.1”替换为“localhost”,但无济于事。
根据github页面,cassandra连接器似乎也是正确的版本。
没有更多的想法尝试不幸的事情!
什么可能是错的?
============================================= ========
编辑:所以我终于解决了这个问题。首先,我编译连接库在本地,这样我可以链接它作为一个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
注意--master local
。这是失踪的重要部分。然后我会在shell中运行:
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当地一部分。
在Scala代码,这意味着改变conf
的定义:
val conf = new SparkConf(true).set("spark.cassandra.connection.host", "localhost").setMaster("local")
做的伎俩。
我仍然真的不明白发生了什么事情,如果有人愿意解释,那将是非常棒的。
你可以用'本地[*]'而不是'本地'主'来尝试吗? –
你的意思是这个吗? 'val sc = new SparkContext(“local [*]”,“Cassandra Connector Test”,conf)'不幸的是我得到了同样的错误:( – elelias
也许尝试0.0.0.0作为RPC地址,然后重新启动Cassandra –