卡桑德拉和火花

时间:2015-10-27 20:48:19

标签: cassandra apache-spark cassandra-2.0 datastax datastax-enterprise

您好我有关于在数据存储企业中一起使用的cassandra和spark的集群拓扑和数据复制的高级问题。

我的理解是,如果群集中有6个节点并且执行了大量计算(例如分析),那么如果需要,您可以拥有3个火花节点和3个cassandra节点。或者您不需要三个节点进行分析,但您的工作运行速度不会很快。您不希望在cassandra节点上进行大量分析的原因是因为本地内存已经被用来处理cassandra的大量读/写负载。

这很清楚,但这是我的问题:

  • 复制数据如何工作呢?
  • 一个机架中只有所有cassandra节点,而另一个机架中的所有火花节点都是?
  • 是否所有数据都被复制到spark节点?
  • 如果有的话,它是如何工作的?
  • 建议的配置步骤是什么,以确保数据正确复制到spark节点?

2 个答案:

答案 0 :(得分:2)

你是对的,你想要分离你的cassandra和你的分析工作量。 典型的设置可能是:

  • 一个数据中心的3个节点(名称:cassandra)
  • 第二个数据中心的3个节点(名称:分析)

创建密钥空间时,您可以使用NetworkTopologyStrategy和为每个数据中心定义的复制因子来定义它们,如下所示:

GossipingPropertyFileSnitch

使用此设置,您的数据将在每个数据中心中复制两次。这是由cassandra自动完成的。因此,当您在DC cassandra中插入数据时,插入的数据将自动复制到DC分析,反之亦然。注意:您可以通过使用单独的键空间来定义要分析的数据和不需要的数据来定义要复制的数据。

在你的cassandra.yaml中,你应该使用cassandra-rackdc.properties。使用此snitch,您可以在文件Select 1 from dual中定义节点的DC和机架。然后,该信息通过八卦协议传播。因此,每个节点都会学习集群的拓扑结构。

答案 1 :(得分:2)

  

复制数据如何工作呢?

常规Cassandra复制将在节点和DC之间运行。就复制而言,这与具有两个数据中心的仅具有c *的集群相同。

  

一个机架中的所有cassandra节点和另一个机架中的所有火花节点都是?

使用默认的DSE Snitch,您的C *节点将位于一个DC中,而Spark节点将位于另一个DC中。它们都将在默认机架中。如果要使用多个机架,则必须使用高级告警来自行配置。根据您的编排机制,GPFS或PFS是不错的选择。了解详情in the DataStax Documentation

  

是否所有数据都被复制到spark节点?如果有的话,它是如何工作的?

复制在密钥空间级别进行控制,具体取决于您的复制策略:

SimpleStrategy只会询问您在群集中想要的副本数量(它不是数据中心可识别的,所以如果您有多个DC,请不要使用它)

create KEYSPACE test WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3 }

这假设您只有一个DC,并且每个数据位都有3个副本

NetworkTopology策略让您选择每个DC的副本数量

create KEYSPACE tst WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1' : 2, 'DC2': 3 }

您可以选择每个DC拥有不同数量的副本。

  

确保将数据正确复制到spark节点的建议配置步骤是什么?

更新RF的程序为in the datastax documentation。这是逐字:

  

更新复制因子增加复制因子   增加存储在a中的键空间数据的总副本数   卡桑德拉集群。如果您正在使用安全功能,那就是   增加复制因子特别重要   system_auth键空间来自默认值(1),因为您将无法使用   如果具有单个副本的节点发生故障,则登录到群集。   建议为system_auth设置复制因子   密钥空间等于每个数据中心的节点数。

     

程序

     

更新群集中的密钥空间并更改其复制策略   选项。 ALTER KEYSPACE system_auth WITH REPLICATION = {'class':   'NetworkTopologyStrategy','dc1':3,'dc2':2};或者如果使用   SimpleStrategy:

     

ALTER KEYSPACE“Excalibur”WITH REPLICATION = {'class':   'SimpleStrategy','replication_factor':3};在每个受影响的节点上   运行nodetool repair命令。等到修复完成了   节点,然后移动到下一个节点。

了解增加群集中的RF会产生大量的IO和CPU利用率以及网络流量,同时您的数据会在群集中被推送。

如果您有实时制作工作量,则可以使用nodetool getstreamthroughput / nodetool setstreamthroughput throttle影响throttle the resulting compactions

您还可以使用nodetool getcompactionthroughput nodetool setcompactionthroughput

eventually consistent
  

Cassandra和Spark如何在分析节点上协同工作   不争取资源?如果您不打算在整个集群中限制Cassandra,那么限制Spark的重点是什么,只需启用所有节点Spark。

关键是您不会将您的主要事务读/写指向Analytics DC(使用一致性级别ONE_LOCAL或QUORUM_LOCAL将这些请求指向C * DC)。不用担心,您的数据仍然通过复制到达分析DC,但您不会等待ack从分析节点返回以响应客户请求。第二个DC是workload isolation

你是对的,因为cassandra和spark仍然在分析DC的相同方框上运行(这对数据局部性至关重要)并且可以访问相同的资源(并且你可以做一些事情,比如控制最大火花核心cassandra还有呼吸空间)。但是你通过拥有两个数据中心来实现ruby driver

默认情况下,DataStax驱动程序会将其连接的第一个联系点的DC视为本地DC,因此请确保您的联系点列表仅包含本地(c * DC)中的计算机。

您还可以根据驱动程序自行指定本地数据中心。以下是{{3}}的示例,请查看其他语言的驱动程序文档。

  

使用:datacenter集群方法:找到第一个数据中心   默认为假定电流。请注意,如果您可以跳过此选项   在“hosts”选项中仅指定本地数据中心的主机。