用Spark连接到Cassandra

时间:2015-03-16 21:17:41

标签: cassandra apache-spark cassandra-2.0

首先,我购买了新的O' Reilly Spark书籍并尝试了那些Cassandra设置说明。我还在网上找到了其他stackoverflow帖子以及各种帖子和指南。他们都没有按原样工作。以下是我能得到的。

这是一项只有少量虚拟测试数据记录的测试。我正在运行最新的Cassandra 2.0.7 Virtual Box VM,它由plasetcassandra.org提供,链接自Cassandra主项目页面。

我下载了Spark 1.2.1源代码并从github获得了最新的Cassandra Connector代码,并针对Scala 2.11构建了代码。我在Mac OS 10.10.2上安装了JDK 1.8.0_40和Scala 2.11.6。

我运行了加载了cassandra连接器的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)

BTW,我还可以使用conf / spark-defaults.conf中的配置文件来完成上述操作,而无需关闭/重新创建spark上下文或传入--driver-clas-path参数。我最终遇到了同样的错误,上面的步骤似乎更容易在这篇文章中进行沟通。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

检查cassandra节点上cassandra.yaml文件中的rpc_address配置。火花连接器可能正在使用system.local / system.peers表中的值,而cassandra.yaml中的值可能设置为127.0.0.1。

spark连接器使用thrift从cassandra获取令牌范围分割。最后我打赌这将被替换,因为C * 2.1.4有一个名为system.size_estimates(CASSANDRA-7688)的新表。看起来它正在获取主机元数据以找到最近的主机,然后在端口9160上使用thrift进行查询。