2015-03-18 137 views
2

当我尝试使用datastax连接器连接到cassandra种子节点时,我不能。使用datastax连接器连接到cassandra'连接器

我有四个火花节点:一个主人和三个工人。这可以自行工作。同样的机器上安装有cassandra,其中一个是spark master作为种子节点。这也可以自己工作(我成功地写了并从中读取)。

现在,我试图做

val info = spark_context.cassandraTable("files", "metainfo") 
println(info.count) 

之前,我指定的火花背景如下:

 val confStandalone = new SparkConf() 
     .set("spark.cassandra.connection.host", "10.14.56.156") 
     .setMaster("spark://10.14.56.156:7077") 
     .setAppName("Test") 
     .set("spark.executor.memory", "1g") 
     .set("spark.eventLog.enabled", "true") 
     .set("spark.driver.host", "10.14.56.156") 
     .set("spark.broadcast.factory", "org.apache.spark.broadcast.HttpBroadcastFactory") 

    val spark_context = new SparkContext(confStandalone) 
    spark_context.addJar("SOME_PATH/spark-cassandra-connector_2.10-1.2.0-alpha1.jar") 

在我的rpc_address设置为10.14.56.156的cassandra.yaml文件并使用标准端口(9160,9042)。现在,当我做

sbt run 

我得到以下错误:

15/03/18 16:38:43 INFO LocalNodeFirstLoadBalancingPolicy: Adding host 127.0.0.1 (datacenter1) 
15/03/18 16:38:43 INFO LocalNodeFirstLoadBalancingPolicy: Adding host 10.14.56.156 (datacenter1) 
15/03/18 16:38:43 INFO LocalNodeFirstLoadBalancingPolicy: Adding host 127.0.0.1 (datacenter1) 
15/03/18 16:38:43 ERROR Session: Error creating pool to /127.0.0.1:9042 com.datastax.driver.core.TransportException: [/127.0.0.1:9042] Cannot connect 
    at com.datastax.driver.core.Connection.<init>(Connection.java:106) 
    at com.datastax.driver.core.PooledConnection.<init>(PooledConnection.java:35) 
    at com.datastax.driver.core.Connection$Factory.open(Connection.java:528) 
... 
Caused by: java.net.ConnectException: Connection refused: /127.0.0.1:9042 at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) 
... 

现在,当我改变rpc_address为0.0.0.0的ID有时劝,我得到了同样的错误,但与10.14.56.156而不是127.0.0.1,只有行:

15/03/18 16:38:43 INFO LocalNodeFirstLoadBalancingPolicy: Adding host 10.14.56.156 (datacenter1) 

与上面的一个和下面的一个(指127.0.0.1)删除。

我没有在iptables中设置任何防火墙规则,所以我不认为这会是一个问题。帮助赞赏!

+0

只是为了澄清,通过将rpc_address更改为0.0.0.0,您现在正在使用'[/X.X.X.X:9042]无法连接'错误,但使用'10 .14.56.156'代替? – 2015-03-19 00:15:39

+0

是的,这就是发生了什么 – 2015-03-19 00:31:58

回答

2

你看过什么broadcast_rpc_address设置为? java驱动程序将从system.peers的“peer”列导出要连接的ip。如果rpc_address设置为0.0.0.0,则必须设置broadcast_rpc_address。

我的猜测是,您的rpc_address设置为0.0.0.0,驱动程序正在从broadcast_rpc_address连接,即使它说[/10.14.56.156:9042] Cannot connect(您可能会看到Connection refused: /127.0.0.1:9042 further in the stack trace)。

+0

嘿安迪,谢谢你的回应。因此,我将rpc_address设置为0.0.0.0,将广播地址设置为10.14.56.156,并且该错误消失了,但现在失去了错误为java.lang.NoClassDefFoundError:com/datastax/driver/core/Statement的任务。我正在寻找如何解决这个问题,以及为什么它开始出现。所以,谢谢你帮助我解决前面的问题,但也许这是一个相关的......所以,如果你有一些建议,这将是伟大的:) – 2015-03-19 01:12:33

+0

这很有趣,声明是驱动程序的核心部分,所以我很惊讶地看到你可以连接驱动程序(它使用语句作为初始化的一部分),但得到一个NCDFError。我不是很了解火花组件,但是你的火花工作者发生了什么故障?你需要将驱动程序和火花连接器添加到你的类路径中吗? – 2015-03-19 01:34:53

+0

我的确将罐子添加到了火花环境中,据我所知,它应该将其运送给工人。如果这是不正确的,我只是尝试添加'spark.executor.extraClassPath'到sparkConf并将该jar放在每个worker和master上的那个位置。但同样的情况仍在发生 – 2015-03-19 01:43:23