apache-spark - 使用 datastax 连接器连接到 cassandra

标签 apache-spark cassandra-2.0 datastax

当我尝试使用 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/

相关文章:

python - PySpark 中的空列表表示

hadoop - 如何将单个数据中心集群迁移到 cassandra 中的多个数据中心集群>

java - 在 cassandra 中创建计数器列族?

从 .sql 文件导入到 cassandra 表

python - 如何使用 Cassandra Python 驱动程序设置/覆盖客户端请求超时?

node.js - Cassandra Datastax Node.js 驱动程序找不到键空间

apache-spark - Spark 1.6 中可以保存 GBTClassifier 吗?

apache-spark - Spark Shuffle- worker 如何知道从何处提取数据

Cassandra : timeout during SIMPLE write query at consistency LOCAL_QUORUM

scala - 为什么Spark with Play的 “NoClassDefFoundError: Could not initialize class org.apache.spark.SparkConf$”失败?