【发布时间】:2016-03-04 11:08:19
【问题描述】:
我正在尝试运行我的第一个 spark 作业(访问 Cassandra 的 Scala 作业)失败并显示以下错误:
java.io.IOException: Failed to open native connection to Cassandra at {<ip>}:9042
at com.datastax.spark.connector.cql.CassandraConnector$.com$datastax$spark$connector$cql$CassandraConnector$$createSession(CassandraConnector.scala:164)
at com.datastax.spark.connector.cql.CassandraConnector$$anonfun$2.apply(CassandraConnector.scala:150)
at com.datastax.spark.connector.cql.CassandraConnector$$anonfun$2.apply(CassandraConnector.scala:150)
at com.datastax.spark.connector.cql.RefCountedCache.createNewValueAndKeys(RefCountedCache.scala:31)
...........
............
Caused by: java.lang.IllegalArgumentException: Contact points contain multiple data centers:
at com.datastax.spark.connector.cql.LocalNodeFirstLoadBalancingPolicy.init(LocalNodeFirstLoadBalancingPolicy.scala:47)
at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1099)
at com.datastax.driver.core.Cluster.getMetadata(Cluster.java:271)
at com.datastax.spark.connector.cql.CassandraConnector$.com$datastax$spark$connector$cql$CassandraConnector$$createSession(CassandraConnector.scala:157)
我们在这里做错了什么?
我正在使用:
- Spark 1.5.2
- Apache Cassandra 2.1.10
- spark-cassandra connector 1.3.1 /1.5.0-M2(两个连接器都试过了)
- Scala 版本 2.10.4
【问题讨论】:
-
C* 集群中有多少台机器和数据中心。只有当接触点跨越多个数据中心并且驱动程序无法确定“本地”数据中心是什么时,才会发生这种情况。这有助于连接器避免跨 DC 流量。
-
感谢 RussS 的回复。我们有一个数据中心,而 cassandra 有 3 个节点集群。 Spark 有一个 4 节点集群(使用 hadoop 1-master 3 数据节点运行)。 spark和cassandra都运行在不同的节点
-
您是否将 --conf spark.cassandra.connection.host 设置为一个(或多个)C* 节点?
-
感谢 Russ 的回复,我想我遇到了问题,它一定是 jar /classpath 冲突。我已经从 spark-shell 执行了示例代码并一一加载了依赖 jar,代码已经检测到了 cassandra 集群和节点。我计划对有问题的火花作业执行相同的步骤。我会更新你。谢谢
-
嗨 Russ,这个问题是特定于谷歌云平台的 dataproc。我能够在另一个独立的 spark 集群中执行相同的作业。
标签: scala apache-spark cassandra cassandra-2.0 spark-cassandra-connector