首页 文章

Cassandra 和火花

提问于
浏览
1

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

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

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

  • 复制数据如何工作?

  • 一个机架中只有cassandra节点,而另一个机架中的所有火花节点都是?

  • 是否所有数据都复制到火花节点?

  • 如果有的话,它是如何工作的?

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

2 回答

  • 2

    复制数据如何工作呢?

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

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

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

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

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

    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 . 这是逐字的:

    更新复制因子增加复制因子会增加存储在Cassandra集群中的键空间数据的总份数 . 如果使用安全功能,则从默认值(1)增加system_auth键空间的复制因子尤为重要,因为如果具有单个副本的节点发生故障,您将无法登录到群集 . 建议将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 来影响.2543289_ .

    你也可以throttle the resulting compactionsnodetool getcompactionthroughput nodetool setcompactionthroughput

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

    关键点在于,您不必担心,您的数据仍然通过复制到达分析DC,但您不会等待ack从分析节点返回以响应客户请求 . 第二个DC是eventually consistent .

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

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

    您还可以根据驱动程序自行指定本地数据中心 . 这是ruby driver的示例,请查看其他语言的驱动程序文档 .

    使用:datacenter集群方法:默认情况下,第一个数据中心将被假定为当前数据中心 . 请注意,如果仅在本地数据中心的hosts节点中指定主机,则可以跳过此选项 .

  • 2

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

    • 3个数据中心的节点(名称:cassandra)

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

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

    CREATE KEYSPACE myKeyspace WITH replication = {'class': 'NetworkTopologyStrategy', 'cassandra': 2, 'analytics': 2};
    

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

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

相关问题