2

連接到遠程卡桑德拉我有一些麻煩,同時試圖使用Apache的星火斯卡拉連接到遠程卡桑德拉。我以前用同樣的方法成功地連接了MongoDb無法通過星火+斯卡拉

這一次,我真的不明白,爲什麼我收到以下錯誤:

Failed to open native connection to Cassandra at {127.0.0.1}:9042

我想這是一個依賴和版本問題,但我沒能找到與此相關的問題,特別是什麼,無論是文件還是其他問題。

我基本上設法通過SSH隧道連接到我的服務器使用jsch和所有正常工作。然後,我能夠成功連接到使用SparkConnectionFactory.scala當地Apache的火花:

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.6,Spark ~v2.1.1,SparkSQL ~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>  

是我的問題導致的衝突版本?如果是的話,我該如何解決這個問題?如果不是,提示什麼是造成它的原因?

在此先感謝。

+0

在端口{} 127.0.0.1:9042將是連接到本地主機,而不是遠程 –

+0

@ cricket_007不,我以上所述,我m使用jsch連接到服務器。當你這樣做的時候,你可以從localhost訪問所有的東西。我能夠使用spark,mongo以及更多類似的工具和服務。 – AndreaM16

+0

然後您不通過SSH轉發正確的端口 –

回答

1

I'm forwarding port 9042 to 8988

那麼這就是你需要連接到

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