当我尝试使用 datastax 连接器连接到 cassandra 种子节点时,无法连接。
我有四个 Spark 节点:一个主节点和三个工作节点。这本身就很有效。同样的机器上安装了 cassandra,其中一个是 Spark Master 作为种子节点。这本身也有效(我成功地编写和读取了它)。
现在,我正在努力
val info = spark_context.cassandraTable("files", "metainfo")
println( info.count )
之前,我指定 Spark 上下文如下:
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")
在 cassandra.yaml 文件中,我将 rpc_address 设置为 10.14.56.156 并使用标准端口(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)
...
现在,当我按照 id 有时建议的那样将 rpc_address 更改为 0.0.0.0 时,我会得到相同的错误,但使用 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 中设置任何防火墙规则,所以我认为这不会成为问题。感谢帮助!
最佳答案
你看过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
(您可能会看到 连接被拒绝:堆栈跟踪中的/127.0.0.1:9042
)。
关于apache-spark - 使用 datastax 连接器连接到 cassandra,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29134849/