Cassandra 火花广播卡桑德拉连接器

Cassandra 火花广播卡桑德拉连接器,cassandra,apache-spark,spark-cassandra-connector,Cassandra,Apache Spark,Spark Cassandra Connector,我使用的是datastax提供的spark cassandra连接器1.1.0。我注意到了干扰问题,我不确定为什么会发生这样的事情: 当我广播cassandra连接器并尝试在执行器上使用它时,我收到一个异常,提示我的配置无效,无法在0.0.0连接到cassandra 示例堆栈跟踪: java.io.IOException: Failed to open native connection to Cassandra at {0.0.0.0}:9042 at com.datastax

我使用的是datastax提供的spark cassandra连接器1.1.0。我注意到了干扰问题,我不确定为什么会发生这样的事情: 当我广播cassandra连接器并尝试在执行器上使用它时,我收到一个异常,提示我的配置无效,无法在0.0.0连接到cassandra

示例堆栈跟踪:

java.io.IOException: Failed to open native connection to Cassandra at {0.0.0.0}:9042
        at com.datastax.spark.connector.cql.CassandraConnector$.com$datastax$spark$connector$cql$CassandraConnector$$createSession(CassandraConnector.scala:174)
        at com.datastax.spark.connector.cql.CassandraConnector$$anonfun$2.apply(CassandraConnector.scala:160)
        at com.datastax.spark.connector.cql.CassandraConnector$$anonfun$2.apply(CassandraConnector.scala:160)
        at com.datastax.spark.connector.cql.RefCountedCache.createNewValueAndKeys(RefCountedCache.scala:36)
        at com.datastax.spark.connector.cql.RefCountedCache.acquire(RefCountedCache.scala:61)
        at com.datastax.spark.connector.cql.CassandraConnector.openSession(CassandraConnector.scala:71)
        at com.datastax.spark.connector.cql.CassandraConnector.withSessionDo(CassandraConnector.scala:97)
...
但是如果我不用广播,一切都正常

对我来说也很奇怪的是,在驱动端广播的值打印正确的配置,但在执行端没有

驾驶员侧:

  val dbConf = ssc.sparkContext.getConf
  val connector = CassandraConnector(dbConf)
  println(connector.hosts) //Set(10.20.1.5) 
  val broadcastedConnector = ssc.sparkContext.broadcast(connector)
  println(broadcastedConnector.value.hosts) //Set(10.20.1.5) 
执行方:

mapPartition{
...
 println(broadcastedConnector.hosts) // Set(0.0.0.)
...
}
有人能解释一下为什么它会以这种方式工作,以及如何以一种可以在执行方使用的方式广播Cassandra连接器吗


更新连接器的1.2.3版本中也存在同样的问题。

没有理由广播Cassandra连接器。在并行化闭包中使用它只会序列化配置并在executor上创建新连接,或者使用现有executor连接(如果存在)。

有关问题的进一步讨论可在下一个链接中找到: