Spark-Cassandra-connector 节点是否知道?

Is the Spark-Cassandra-connector node aware?

Datastax Cassandra 社区版是否使用 spark-cassandra-connector 社区版节点感知与 Spark 社区版集成,或者此功能是否仅为企业版保留?

我所说的节点感知是指 Spark 是否会将作业执行发送到拥有数据的节点

是的,Spark 连接器是 node-aware 并且将以这种方式与 DSE 和(开源)Apache Cassandra 一起运行。

事实上,在 SELECT 上,它知道如何将分区键散列为令牌,并将特定令牌范围的查询仅发送到负责该数据的节点。它可以做到这一点,因为(就像 Cassandra Java 驱动程序一样)它有一个 window 到 node-to-node 八卦并且可以看到节点状态(up/down)和令牌范围分配之类的东西.

在 Spark 中它被称为 data locality

只有当 Cassandra 和 Spark worker/executor 的 JVM 在同一个 OSI 中 co-located 时,才能实现数据局部性。根据定义,如果执行处理的执行程序与 Cassandra 节点 运行 在同一台服务器 (OSI) 上,则数据只能是本地的。

initial contact 集群期间,驱动程序检索有关集群拓扑的信息——可用节点、rack/DC 配置、令牌所有权。由于驱动程序知道节点的位置,因此它将始终尝试连接到同一(本地)数据中心中“最近”的节点。

如果 Spark workers/executors 与 Cassandra 节点 co-located,则 Spark-Cassandra-connector 将在拥有数据的节点上处理 Spark 分区,以尽可能减少数据混洗的数量跨网络。

methods such as joinWithCassandraTable() which maximise data locality where possible. Additionally, the repartitionByCassandraReplica() method 个拆分 Spark 分区,因此它们被映射到拥有数据的 Cassandra 副本。

此功能适用于 open-source Cassandra 集群和 DataStax Enterprise 集群。干杯!