首页 > 解决方案 > java.io.IOException:无法在 127.0.0.1:9042 打开到 Cassandra 的本机连接

问题描述

找到了一个类似的帖子,但没有帮助。

我已经使用 Cassandra 有一段时间了,现在我正在尝试设置 spark 和 spark-cassandra-connector。我正在使用 IntelliJ IDEA 来做到这一点(第一次使用 IntelliJ IDEA 和 Scala,所以你明白了)

我的操作系统是 Windows 10。这就是我所做的:

内部../spark-2.4.5-bin-hadoop2.7/binspark-class.cmd org.apache.spark.deploy.master.Master

内部../spark-2.4.5-bin-hadoop2.7/binspark-class.cmd org.apache.spark.deploy.worker.Worker -c 1 spark://192.168.0.3:7077

构建.gradle

apply plugin: 'scala'
apply plugin: 'idea'
apply plugin: 'eclipse'

repositories {
    mavenCentral()
}

idea {
    project {
        jdkName = '1.8'
        languageLevel = '1.8'
    }
}

dependencies {
    compile group: 'org.apache.spark', name: 'spark-core_2.11', version: '2.4.5'
    compile group: 'org.apache.spark', name: 'spark-sql_2.11', version: '2.4.5'
    compile group: 'org.scala-lang', name: 'scala-library', version: '2.11.11'
    compile group: 'com.datastax.spark', name: 'spark-cassandra-connector_2.11', version: '2.4.0'
}

configurations.all {
    resolutionStrategy {
        force 'com.google.guava:guava:12.0.1'
    }
}

compileScala.targetCompatibility = "1.8"
compileScala.sourceCompatibility = "1.8"

SparkModule.scala

package org.sentinel.spark_module

import org.apache.spark.{SparkConf, SparkContext}
import com.datastax.spark.connector._

object SentinelSparkModule {
  def main(args: Array[String]) {
    val conf = new SparkConf().set("spark.cassandra.connection.host", "127.0.0.1")
      .set("spark.cassandra.connection.port", "9042")
      .setAppName("Sentinel").setMaster("spark://192.168.0.3:7077")

    val sc = new SparkContext(conf)
    val rdd = sc.cassandraTable("keyspace", "table")
    val values = rdd.groupBy((CassandraRow) => {
      @throws[Exception]
      def call(row: Nothing) = CassandraRow.getString("column")
    }).take(10).foreach(println)    
  }
}

即使发生错误,我仍然可以看到应用程序在http://localhost:8080/中运行,直到我在 IDE 中停止执行。 在此处输入图像描述

完整堆栈转储的摘录:

线程“主”java.io.IOException 中的异常:无法 在 {127.0.0.1}:9042 打开到 Cassandra 的本机连接

引起:com.datastax.driver.core.exceptions.NoHostAvailableException:所有 主机尝试查询失败(尝试:/127.0.0.1:9042 (com.datastax.driver.core.exceptions.OperationTimedOutException: [/127.0. 0.1:9042] 操作超时))

最后,即使它说超时,我也在从我的网络应用程序 (node.js) 查询 Cassandra,因为我正在编写代码并且查询工作正常。所以,我不知道为什么这对 Cassandra 来说是个问题,但我想可能是这样。

谢谢

编辑:

我包括了compile group: 'com.datastax.cassandra', name: 'cassandra-driver-core', version: '3.0.0'同样的错误。(版本兼容表

编辑:

nodetool status显示:

Datacenter: datacenter1
========================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load        Tokens       Owns (effective)  Host ID                               Rack
UN  127.0.0.1  138.59 MiB  256          100.0%            77d808e6-5c57-494a-b6fb-7e73593dbb46  rack1

编辑:

cqlsh 127.0.0.1 9042显示:

WARNING: console codepage must be set to cp65001 to support utf-8 encoding on Windows platforms.
If you experience encoding problems, change your console codepage with 'chcp 65001' before starting cqlsh.

Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.11.4 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
WARNING: pyreadline dependency missing.  Install to enable tab completion.
cqlsh>

标签: scalaapache-sparkcassandradatastaxspark-cassandra-connector

解决方案


Cassandra 是否也在运行192.168.0.3?您是否尝试spark.cassandra.connection.host改为192.168.0.3改为?您看到该错误的原因是您的 Spark 执行程序无法在127.0.0.1. 我对您的设置一无所知,您可能已经尝试过,但解决方案可能就是这么简单。


推荐阅读