Apache spark Spark本地rdd写入本地Cassandra DB
我有一个DSE集群,集群中的每个节点都运行spark和Cassandra 当我从Cassandra加载数据到spark Rdd并对Rdd执行一些操作时,我知道数据将分布到多个节点中。在我的例子中,我想将这些RDD从每个节点直接写到它的本地Cassandra dB表中,不管怎样,都可以这样做 若我进行正常的rdd收集,来自spark节点的所有数据都将被合并并返回到带有驱动程序的节点。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节点的所有数据都将被合并并返回到带有驱动程序的节点。 我不希望发生这种情况,因为从节点返回驱动程序节点的数据流可能需要很长时间,我希望数据直接保存到本地节点,以避免数据
我不希望发生这种情况,因为从节点返回驱动程序节点的数据流可能需要很长时间,我希望数据直接保存到本地节点,以避免数据跨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 Cassandra连接器的许多其他信息。当Spark executor从Cassandra读取数据时,它会向“最佳节点”发送请求,该节点是根据不同因素选择的:
- 当Spark与Cassandra并置时,Spark试图从同一节点提取数据
- 当Spark位于不同的节点上时,它使用令牌感知路由,并按照分区范围的定义并行地从多个节点读取数据
另外,您可以在中找到有关Spark Cassandra连接器的更多信息。Spark Cassandra连接器不使用Thrift(端口9160):-)此外,127.0.0.1也没有帮助,因为触点只是用于发现集群的拓扑,而不是发送写入/读取的位置Park Cassandra连接器不使用Thrift(端口9160):-)另外,127.0.0.1也没有帮助,因为接触点只是用来发现集群的拓扑结构,而不是用来发送写/读的位置