【问题标题】:Fail to use spark-cassandra-connector无法使用 spark-cassandra-connector
【发布时间】:2017-02-22 15:14:56
【问题描述】:

我想执行一个 spark 项目以使用 spark-cassandra-connector 连接到 cassandra,如下所示:

版本:

  • 卡桑德拉:2.1.2
  • CassandraDriver:2.1.3
  • 火花:1.1.0

build.sbt

name := "sparktest"

version := "1.0"

scalaVersion := "2.10.4"

libraryDependencies += "com.datastax.spark" %% "spark-cassandra-connector" % "1.1.0" withSources() withJavadoc()

sparkCassandra.scala

import com.datastax.spark.connector._
import org.apache.spark._

object SparkTest {
  def main(args: Array[String]){
    val conf = new SparkConf(true).set("spark.cassandra.connection.host", "127.0.0.1")
    val sc = new SparkContext("spark://master:7077", "test", conf)

    val rdd = sc.cassandraTable("mykeyspace", "users")
    println(rdd.count) 
  }
}

但是当我通过

执行这个项目时
spark-submit --class "SparkTest"  target/scala-2.10/sparktest_2.10-1.0.jar

出现错误

Exception in thread "main" java.io.IOException: Failed to open thrift connection to Cassandra at 127.0.0.1:9160
        at com.datastax.spark.connector.cql.CassandraConnector.createThriftClient(CassandraConnector.scala:132)
        at com.datastax.spark.connector.cql.CassandraConnector.createThriftClient(CassandraConnector.scala:138)
        at com.datastax.spark.connector.cql.CassandraConnector.withCassandraClientDo(CassandraConnector.scala:144)
        at com.datastax.spark.connector.rdd.partitioner.CassandraRDDPartitioner.partitions(CassandraRDDPartitioner.scala:158)
        at com.datastax.spark.connector.rdd.CassandraRDD.getPartitions(CassandraRDD.scala:294)
        at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:204)
        at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:202)
        at scala.Option.getOrElse(Option.scala:120)
        at org.apache.spark.rdd.RDD.partitions(RDD.scala:202)
        at org.apache.spark.SparkContext.runJob(SparkContext.scala:1135)
        at org.apache.spark.rdd.RDD.count(RDD.scala:904)
        at SparkTest$.main(sparkcassandra.scala:14)
        at SparkTest.main(sparkcassandra.scala)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.spark.deploy.SparkSubmit$.launch(SparkSubmit.scala:328)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:75)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.NoSuchMethodError: org.apache.cassandra.thrift.TFramedTransportFactory.openTransport(Ljava/lang/String;I)Lorg/apache/thrift/transport/TTransport;
        at com.datastax.spark.connector.cql.DefaultConnectionFactory$.createThriftClient(CassandraConnectionFactory.scala:47)
        at com.datastax.spark.connector.cql.CassandraConnector.createThriftClient(CassandraConnector.scala:127)
        ... 19 more

我发现如果我输入错误的表名,它会说“找不到表” 好像连接成功了。

但是我使用cassandra表rdd的时候会出现上面的错误。 我不知道这个错误的原因是什么,如果有人可以帮助我吗?非常感谢!

【问题讨论】:

  • 试试telnet 127.0.0.1 9160 -> 你有连接吗?
  • 它显示:“正在尝试 127.0.0.1... 连接到 127.0.0.1。转义字符是 '^]'。”
  • if start_rpc: false in yaml file then make it true

标签: scala cassandra apache-spark


【解决方案1】:

我认为你的 cassandra 没有在端口 9160 上运行。你可以在 cassandra.yaml 文件中验证它,并使用 telnet 127.0.0.1 9160 进行验证,看看它可以远程登录到这个端口。

【讨论】:

  • 它显示:“正在尝试 127.0.0.1... 连接到 127.0.0.1。转义字符是 '^]'。”
  • 但我对“ 引起:java.lang.NoSuchMethodError: org.apache.cassandra.thrift.TFramedTransportFactory.openTransport(Ljava/lang/String;I)Lorg/apache/thrift/运输/TTransport; "
  • 这个错误是否也意味着我的cassandra端口不起作用?
  • 你能否在 cassandra.yaml 中确认端口也可以尝试更改默认 cassandra 端口 - @Jhong-YiChen
  • 我已经检查了端口并且可以通过“telnet”连接而没有错误。但是还是有同样的错误。。。谢谢耐心的回复~! @Sachin Janani
【解决方案2】:

我以前遇到过保存问题。 此错误是由 Cassandra 驱动程序和主机之间的版本不匹配引起的。 因此,请检查您的 spark-application-jar 中是否包含较低版本的 Cassandra 驱动程序。 在这种情况下,您应该使用 Cassandra 驱动程序 2.1.x。

【讨论】:

    【解决方案3】:

    通过两次更正解决了这个问题:

    1. 使用 localhost 而不是 IP。
    2. val sc = new SparkContext(conf)

    后续步骤没有其他变化。 希望它也对你有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-06
      • 2020-06-12
      • 2017-10-24
      • 2016-09-02
      • 2019-04-10
      • 2019-09-10
      • 2019-10-06
      • 1970-01-01
      相关资源
      最近更新 更多