Apache spark Spark本地rdd写入本地Cassandra DB

Apache spark Spark本地rdd写入本地Cassandra DB,apache-spark,cassandra,spark-cassandra-connector,dse,Apache Spark,Cassandra,Spark Cassandra Connector,Dse,我有一个DSE集群,集群中的每个节点都运行spark和Cassandra 当我从Cassandra加载数据到spark Rdd并对Rdd执行一些操作时,我知道数据将分布到多个节点中。在我的例子中,我想将这些RDD从每个节点直接写到它的本地Cassandra dB表中,不管怎样,都可以这样做 若我进行正常的rdd收集,来自spark节点的所有数据都将被合并并返回到带有驱动程序的节点。 我不希望发生这种情况,因为从节点返回驱动程序节点的数据流可能需要很长时间,我希望数据直接保存到本地节点,以避免数据

我有一个DSE集群,集群中的每个节点都运行spark和Cassandra

当我从Cassandra加载数据到spark Rdd并对Rdd执行一些操作时,我知道数据将分布到多个节点中。在我的例子中,我想将这些RDD从每个节点直接写到它的本地Cassandra dB表中,不管怎样,都可以这样做

若我进行正常的rdd收集,来自spark节点的所有数据都将被合并并返回到带有驱动程序的节点。
我不希望发生这种情况,因为从节点返回驱动程序节点的数据流可能需要很长时间,我希望数据直接保存到本地节点,以避免数据跨spark节点移动。

一句警告:我只将Cassandra和spark作为单独的开源项目使用,我没有DSE方面的专业知识

我担心数据需要进入网络进行复制,即使每个spark节点都与本地cassandra节点通信


如果没有复制和运行Spark作业来确保所有数据都散列并预散列到相应的Cassandra节点,那么应该可以使用127.0.0.1:9042并避开网络。

警告一句:我只将Cassandra和Spark作为单独的开源项目使用,我没有DSE方面的专业知识

我担心数据需要进入网络进行复制,即使每个spark节点都与本地cassandra节点通信


如果不进行复制并运行Spark作业以确保所有数据都已散列并预散列到相应的Cassandra节点,则应该可以使用127.0.0.1:9042并避开网络。

当Spark executor从Cassandra读取数据时,它会将请求发送到基于不同因素选择的“最佳节点”:

  • 当Spark与Cassandra并置时,Spark试图从同一节点提取数据
  • 当Spark位于不同的节点上时,它使用令牌感知路由,并按照分区范围的定义并行地从多个节点读取数据
在写入时,如果您有多个执行器,那么每个执行器将打开到每个节点的多个连接,并使用令牌感知路由写入数据,这意味着数据将直接发送到其中一个副本。此外,Spark正在尝试将属于同一分区的多行批处理到一个未标记的批处理中,因为这样性能更好。即使Spark分区与Cassandra分区位于同一位置,由于SCC使用一致性级别2进行写入,写入也可能会带来额外的网络开销

如果需要,您可以获得共定位数据),但这种重新分区可能会导致Spark shuffle,与将数据从executor写入另一个节点相比,Spark shuffle可能更重


另外,您可以在中找到有关Spark Cassandra连接器的许多其他信息。

当Spark executor从Cassandra读取数据时,它会向“最佳节点”发送请求,该节点是根据不同因素选择的:

  • 当Spark与Cassandra并置时,Spark试图从同一节点提取数据
  • 当Spark位于不同的节点上时,它使用令牌感知路由,并按照分区范围的定义并行地从多个节点读取数据
在写入时,如果您有多个执行器,那么每个执行器将打开到每个节点的多个连接,并使用令牌感知路由写入数据,这意味着数据将直接发送到其中一个副本。此外,Spark正在尝试将属于同一分区的多行批处理到一个未标记的批处理中,因为这样性能更好。即使Spark分区与Cassandra分区位于同一位置,由于SCC使用一致性级别2进行写入,写入也可能会带来额外的网络开销

如果需要,您可以获得共定位数据),但这种重新分区可能会导致Spark shuffle,与将数据从executor写入另一个节点相比,Spark shuffle可能更重


另外,您可以在中找到有关Spark Cassandra连接器的更多信息。

Spark Cassandra连接器不使用Thrift(端口9160):-)此外,127.0.0.1也没有帮助,因为触点只是用于发现集群的拓扑,而不是发送写入/读取的位置Park Cassandra连接器不使用Thrift(端口9160):-)另外,127.0.0.1也没有帮助,因为接触点只是用来发现集群的拓扑结构,而不是用来发送写/读的位置