Cassandra + Spark执行程序超融合

问题描述 投票:1回答:3

由于Apache Spark是建议用于Cassandra的分布式处理引擎,所以我知道可以与Cassandra节点一起运行Spark执行程序。我的问题是,驱动程序和Spark连接器是否足够聪明,可以理解分区和分片分配,从而以超融合的方式处理数据。

简单来说,执行程序是否从运行执行程序的节点上托管的分区中读取存储的数据,因此在HDFS上运行时,不会像Spark那样通过网络传输不必要的数据?

apache-spark cassandra spark-cassandra-connector
3个回答
2
投票

是的,Spark Cassandra Connector可以执行此操作。从source code

getPreferredLocations方法告诉Spark首选节点从中获取分区,以便该分区的数据位于任务发送到的同一节点上。 如果Cassandra节点与Spark节点并置,则查询总是发送到与Spark Executor进程在同一节点上运行的Cassandra进程,因此不会在节点之间传输数据。如果Cassandra节点失败或在执行过程中过载读取后,查询将重试到另一个节点。


1
投票

理论上是。 HDFS也一样。 Howevet实际上在云上很少见到这种情况,在使用云服务时,将单独的节点用于spark和Cassandra。如果您使用IAsAS并设置自己的Cassandra和Spark,则可以实现。


1
投票

我想补充一下亚历克斯的答案:

是的,Spark Cassandra Connector可以执行此操作。从源头代码:

getPreferredLocations方法告诉Spark首选节点从中获取分区,以便该分区的数据位于任务发送到的同一节点。如果Cassandra节点与Spark节点,查询始终发送到Cassandra进程在与Spark Executor进程相同的节点上运行,因此数据是没有在节点之间转移。如果Cassandra节点失败或获取读取期间超载,查询将重试到另一个节点。

这是不良行为。

在Cassandra中,当您要求获取特定分区的数据时,仅访问一个节点。由于复制,Spark实际上可以访问3个节点。因此,在不拖尾的情况下,您有3个节点参与该工作。

但是,在Hadoop中,当您要求获取特定分区的数据时,通常会访问集群中的所有节点,然后Spark将集群中的所有节点用作执行程序。

因此,如果您有100个节点:在Cassandra中,Spark将利用3个节点。在Hadoop中,Spark将利用100个节点。

Cassandra针对实时操作系统进行了优化,因此未针对数据湖之类的分析进行优化。

© www.soinside.com 2019 - 2024. All rights reserved.