使用Spark连接到Cassandra

使用Spark连接到Cassandra,cassandra,apache-spark,cassandra-2.0,Cassandra,Apache Spark,Cassandra 2.0,首先,我买了新的O'Reilly Spark书,并尝试了卡桑德拉的安装说明。我也在网上找到了其他stackoverflow帖子以及各种帖子和指南。他们都没有按原样工作。下面是我能得到的 这是一项只有少量虚拟试验数据记录的试验。我正在运行由plasetcassandra.org提供的最新Cassandra 2.0.7虚拟机,该虚拟机与Cassandra项目主页链接 我下载了Spark 1.2.1源代码,从github获得了最新的Cassandra连接器代码,并根据Scala 2.11构建了这两个连

首先,我买了新的O'Reilly Spark书,并尝试了卡桑德拉的安装说明。我也在网上找到了其他stackoverflow帖子以及各种帖子和指南。他们都没有按原样工作。下面是我能得到的

这是一项只有少量虚拟试验数据记录的试验。我正在运行由plasetcassandra.org提供的最新Cassandra 2.0.7虚拟机,该虚拟机与Cassandra项目主页链接

我下载了Spark 1.2.1源代码,从github获得了最新的Cassandra连接器代码,并根据Scala 2.11构建了这两个连接器。我在Mac OS 10.10.2上安装了JDK 1.8.0_40和Scala 2.11.6

我在装有卡桑德拉连接器的情况下运行spark shell:

bin/spark-shell --driver-class-path ../spark-cassandra-connector/spark-cassandra-connector/target/scala-2.11/spark-cassandra-connector-assembly-1.2.0-SNAPSHOT.jar
然后我在一个包含四条记录的测试表上执行一个简单的行计数类型测试:

import com.datastax.spark.connector._
sc.stop
val conf = new org.apache.spark.SparkConf(true).set("spark.cassandra.connection.host", "192.168.56.101")
val sc = new org.apache.spark.SparkContext(conf)
val table = sc.cassandraTable("mykeyspace", "playlists")
table.count
我得到以下错误。令人困惑的是,它试图在127.0.0.1中查找Cassandra时出错,但它也能识别我配置的主机名,即192.168.56.101

15/03/16 15:56:54 INFO Cluster: New Cassandra host /192.168.56.101:9042 added
15/03/16 15:56:54 INFO CassandraConnector: Connected to Cassandra cluster: Cluster on a Stick
15/03/16 15:56:54 ERROR ServerSideTokenRangeSplitter: Failure while fetching splits from Cassandra
java.io.IOException: Failed to open thrift connection to Cassandra at 127.0.0.1:9160
<snip>
java.io.IOException: Failed to fetch splits of TokenRange(0,0,Set(CassandraNode(/127.0.0.1,/127.0.0.1)),None) from all endpoints: CassandraNode(/127.0.0.1,/127.0.0.1)
15/03/16 15:56:54信息集群:新增卡桑德拉主机/192.168.56.101:9042
15/03/16 15:56:54信息Cassandra连接器:连接到Cassandra群集:棒上的群集
15/03/16 15:56:54错误ServerSideTokenRangeSpilter:从Cassandra获取拆分时失败
java.io.IOException:无法在127.0.0.1:9160打开到Cassandra的thrift连接
java.io.IOException:未能从所有终结点获取TokenRange(0,0,Set(CassandraNode(/127.0.0.1,/127.0.0.1)),无)的拆分:CassandraNode(/127.0.0.1,/127.0.0.1)
顺便说一句,我还可以使用conf/spark-defaults.conf上的配置文件来执行上述操作,而无需关闭/重新创建spark上下文或传入--driver clas path参数。不过,我最终还是犯了同样的错误,在这篇文章中,上述步骤似乎更容易沟通


有什么想法吗?

检查cassandra节点上cassandra.yaml文件中的rpc_地址配置。spark connector可能正在使用system.local/system.peers表中的该值,并且可能在您的cassandra.yaml中将其设置为127.0.0.1

spark connector使用thrift从cassandra获得标记范围分割。最终,我打赌这将被取代,因为C*2.1.4有一个名为system.size_estimates()的新表。它看起来像是获取主机元数据以查找最近的主机,然后在端口9160上使用thrift进行查询