那么复制的数据是如何工作的呢?
常规 Cassandra 复制将在节点和 DC 之间运行。就复制而言,这与拥有一个只有 c* 的集群和两个数据中心是一样的。
是不是所有的 cassandra 节点都在一个机架上,而所有的 spark 节点都在另一个机架上?
使用默认的 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 中的 keyspace 数据的副本总数
Cassandra 集群。如果您使用安全功能,它是
增加复制因子尤为重要
system_auth 键空间来自默认值 (1),因为您将无法
如果具有唯一副本的节点出现故障,则登录到集群。
建议为 system_auth 设置复制因子
keyspace 等于每个数据中心的节点数。
程序
更新集群中的键空间并更改其复制策略
选项。 ALTER KEYSPACE system_auth WITH REPLICATION = {'class' :
'NetworkTopologyStrategy', 'dc1' : 3, 'dc2' : 2};或者如果使用
简单策略:
使用 REPLICATION = { 'class' 更改键空间“Excalibur”:
'SimpleStrategy', 'replication_factor' : 3 };在每个受影响的节点上,
运行 nodetool 修复命令。等到修复完成
节点,然后移动到下一个节点。
知道增加集群中的 RF 会产生大量 IO 和 CPU 利用率以及网络流量,同时您的数据会在集群中被推送。
如果您有实时生产工作负载,您可以使用nodetool getstreamthroughput / nodetool setstreamthroughput throttle 影响。
你也可以throttle the resulting compactions 和nodetool getcompactionthroughput nodetool setcompactionthroughput
Cassandra 和 Spark 如何在分析节点上协同工作?
不争资源?如果您根本不打算在整个集群中限制 Cassandra,那么限制 Spark 的意义何在,只需启用所有节点 Spark。
关键是您不会将主要事务性读取/写入指向 Analytics DC(使用一致性级别 ONE_LOCAL 或 QUORUM_LOCAL 之类的东西将这些请求指向 C* DC)。不用担心,您的数据仍会通过复制到达分析 DC,但您不会等待从分析节点返回的确认信息来响应客户请求。第二个 DC 是eventually consistent。
您说得对,cassandra 和 spark 仍在分析 DC 中的相同机器上运行(这对于数据本地化至关重要)并且可以访问相同的资源(并且您可以执行控制最大 spark 核心等操作,因此卡桑德拉还有喘息的空间)。但是您可以通过拥有两个数据中心来实现workload isolation。
默认情况下,DataStax 驱动程序会将其连接的第一个接触点的 DC 视为本地 DC,因此只需确保您的接触点列表仅包括本地 (c* DC) 中的机器。
您也可以根据驱动程序自行指定本地数据中心。这是ruby driver 的示例,请查看其他语言的驱动程序文档。
使用 :datacenter 集群方法:找到的第一个数据中心将是
默认情况下假定电流。请注意,如果您
在 :hosts 选项中仅指定本地数据中心的主机。