嗨我有一个关于集群拓扑和数据复制的高级问题,关于在数据存储企业中一起使用的cassandra和spark .
我的理解是,如果群集中有6个节点,并且执行了大量计算(例如分析),那么如果需要,您可以拥有3个火花节点和3个cassandra节点 . 或者,您不需要三个节点进行分析,但您的作业运行速度不会很快 . 您不希望在cassandra节点上进行大量分析的原因是因为本地内存已经用于处理cassandra的繁重读/写负载 .
这很清楚,但这是我的问题:
-
复制数据如何工作?
-
一个机架中只有cassandra节点,而另一个机架中的所有火花节点都是?
-
是否所有数据都复制到火花节点?
-
如果有的话,它是如何工作的?
-
为确保将数据正确复制到spark节点,建议的配置步骤是什么?
2 回答
常规的Cassandra复制将在节点和DC之间运行 . 就复制而言,这与具有两个数据中心的仅具有c *的集群相同 .
使用默认的DSE Snitch,您的C *节点将位于一个DC中,而Spark节点将位于另一个DC中 . 它们都将在默认机架中 . 如果要使用多个机架,则必须使用高级告警来自行配置 . 根据您的编排机制,GPFS或PFS是不错的选择 . 了解更多in the DataStax Documentation
复制在密钥空间级别进行控制,具体取决于您的复制策略:
SimpleStrategy只会询问您在群集中想要的副本数量(它不是数据中心可识别的,所以如果您有多个DC,请不要使用它)
假设您只有一个DC,并且每个数据位都有3个副本
NetworkTopology策略让您选择每个DC的副本数量
您可以选择每个DC具有不同数量的副本 .
更新RF的过程是in the datastax documentation . 这是逐字的:
要知道,增加群集中的RF会产生大量的IO和CPU利用率以及网络流量,而您的数据会在群集中被推送 .
如果您有实时 生产环境 工作负载,则可以使用
nodetool getstreamthroughput
/nodetool setstreamthroughput
来影响.2543289_ .你也可以throttle the resulting compactions与
nodetool getcompactionthroughput
nodetool setcompactionthroughput
关键点在于,您不必担心,您的数据仍然通过复制到达分析DC,但您不会等待ack从分析节点返回以响应客户请求 . 第二个DC是eventually consistent .
你是对的,因为cassandra和spark仍然在分析DC的相同方框上运行(这对数据局部性至关重要)并且可以访问相同的资源(并且你可以做一些事情,比如控制最大火花核心,这样cassandra仍然具有呼吸室) . 但是你通过拥有两个数据中心来实现workload isolation .
默认情况下,DataStax驱动程序会将其连接的第一个联系点的DC视为本地DC,因此请确保您的联系点列表仅包含本地(c * DC)中的计算机 .
您还可以根据驱动程序自行指定本地数据中心 . 这是ruby driver的示例,请查看其他语言的驱动程序文档 .
你是对的,你想要分离你的cassandra和你的分析工作量 . 典型的设置可能是:
3个数据中心的节点(名称:cassandra)
3个第二个数据中心的节点(名称:分析)
在创建密钥空间时,您可以使用NetworkTopologyStrategy和为每个数据中心定义的复制因子来定义它们,如下所示:
使用此设置,您的数据将在每个数据中心中复制两次 . 这是由cassandra自动完成的 . 因此,当您在DC cassandra中插入数据时,插入的数据将自动复制到DC分析,反之亦然 . 注意:您可以使用单独的键空间来定义要分析的数据和不需要的数据,从而定义要复制的数据 .
在你的cassandra.yaml中你应该使用
GossipingPropertyFileSnitch
. 使用此snitch,您可以在文件cassandra-rackdc.properties
中定义节点的DC和机架 . 然后,该信息通过八卦协议传播 . 因此,每个节点都会学习集群的拓扑结构 .