【问题标题】:Unable to connect to remote Cassandra via Spark + Scala无法通过 Spark + Scala 连接到远程 Cassandra
【发布时间】:2017-12-23 09:02:04
【问题描述】:

我在尝试使用 Apache-SparkScala 连接到远程 Cassandra 时遇到了一些麻烦。我过去以同样的方式成功地连接到 MongoDb

这次我真的不明白为什么会出现以下错误:

无法在 {127.0.0.1}:9042 打开到 Cassandra 的本机连接

我猜这是一个依赖和版本问题,但我无法找到任何与此问题相关的内容,尤其是在文档和其他问题上。

我基本上设法通过 ssh-tunnel 使用jsch 连接到我的服务器,并且一切正常。然后,我可以使用 SparkConnectionFactory.scala 成功连接到本地 apache-spark:

package connection

import org.apache.spark.{SparkConf, SparkContext}

class SparkConnectionFactory {

  var sparkContext : SparkContext = _

  def initSparkConnection = {
    val configuration = new SparkConf(true).setMaster("local[8]")
                        .setAppName("my_test")
                        .set("spark.cassandra.connection.host", "localhost")
                        .set("spark.cassandra.input.consistency.level","ONE")
                        .set("spark.driver.allowMultipleContexts", "true")
    val sc = new SparkContext(configuration)
    sparkContext = sc
  }

  def getSparkInstance : SparkContext = {
    sparkContext
  }

}

并在我的 Main.scala 中调用它:

val sparkConnectionFactory = new SparkConnectionFactory
sparkConnectionFactory.initSparkConnection
val sc : SparkContext = sparkConnectionFactory.getSparkInstance

但是,当我尝试使用以下方法选择 Cassandra 表中的所有项目时:

val rdd = sc.cassandraTable("my_keyspace", "my_table")
rdd.foreach(println) 

我收到上面写的错误。

在我的服务器上,我安装了Scala ~v2.11.6Spark ~v2.1.1SparkSQL ~v2.1.1。当然,我有 8 个内核,复制因子为 1。在我的 pom.xml 上,我有:

. . .
<properties>
    <scala.version>2.11.6</scala.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>${scala.version}</version>
    </dependency>

    . . .

    <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core_2.10 -->
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>2.1.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/com.datastax.spark/spark-cassandra-connector_2.10 -->
    <dependency>
        <groupId>com.datastax.spark</groupId>
        <artifactId>spark-cassandra-connector_2.11</artifactId>
        <version>2.0.3</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql_2.10 -->
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
        <version>2.1.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.9</version>
    </dependency>

</dependencies>    

我的问题是由版本冲突引起的吗?如果是,我该如何解决这个问题?如果没有,有什么提示吗?

提前致谢。

【问题讨论】:

  • 在 {127.0.0.1}:9042 将连接到本地主机,而不是远程
  • @cricket_007 不,如上所述,我使用 jsch 连接到服务器。然后,当您这样做时,您可以从 localhost 访问所有内容。我可以使用 spark、mongo 以及更多类似的工具和服务。
  • 那么你没有通过 SSH 转发正确的端口
  • 我将端口9042转发到8988
  • 好的,那么你的错误特别指出它正在尝试连接到 localhost 9042,而不是 8988,所以要么将你的本地端口转发到同一个远程端口,要么将端口添加到你的配置中

标签: scala maven apache-spark cassandra spark-cassandra-connector


【解决方案1】:

我将端口 9042 转发到 8988

那就是你需要连接的端口

.set("spark.cassandra.connection.port", 8988) 

【讨论】:

    猜你喜欢
    • 2015-01-03
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    相关资源
    最近更新 更多