Database Spark:在某个节点中打开数据库会话,广播它,在另一个节点中检索它。。。会议还有效吗?

Database Spark:在某个节点中打开数据库会话,广播它,在另一个节点中检索它。。。会议还有效吗?,database,networking,cassandra,apache-spark,Database,Networking,Cassandra,Apache Spark,假设我们有一个由多个节点组成的spark集群。在驱动程序中,我打开一个cassandra会话(Cluster.builder().addContactPoint(…).build().connect(keyspace))。如果我在广播变量中传递此会话并在另一个节点中检索它,会发生什么?此会话仍然可用吗?数据库会话(一旦打开)是否绑定到打开它的计算机 尝试有点困难,因为我没有多个节点的群集…否。如果您尝试共享会话,则需要在其他节点上重新建立会话(它不可序列化)。但是,如果您想在特定节点上共享会话,

假设我们有一个由多个节点组成的spark集群。在驱动程序中,我打开一个cassandra会话(Cluster.builder().addContactPoint(…).build().connect(keyspace))。如果我在广播变量中传递此会话并在另一个节点中检索它,会发生什么?此会话仍然可用吗?数据库会话(一旦打开)是否绑定到打开它的计算机


尝试有点困难,因为我没有多个节点的群集…

否。如果您尝试共享会话,则需要在其他节点上重新建立会话(它不可序列化)。但是,如果您想在特定节点上共享会话,可以使用Spark Cassandra连接器

Spark Cassandra连接器有一个对象CassandraConnector(SparkConf),它将共享会话,并使在同一台机器上的任务之间共享C*连接变得容易

比如说

rdd.map( item => CassandraConnector(conf).withSessionDo ( session => ... ) )
每个executor JVM将仅使用1个C*群集连接


我认为这个链接可以很好地回答您的问题C*=Cassandra,基本上每个Executor JVM有一个java驱动程序集群对象