【问题标题】:Can we have many coordinator nodes at one time in Cassandra?我们可以在 Cassandra 中同时拥有多个协调器节点吗?
【发布时间】:2018-08-17 23:14:38
【问题描述】:

希望这是正确的提问地点!

我正在尝试使用 spark、cassandra 和另外一个外部工具建立一个集群。因此,外部工具在 spark(pipe 命令)的帮助下在集群中并行执行,并且该工具能够通过简单的 sql Insert 命令直接存储到 cassandra 数据库(见下图)。这意味着在每个节点中,结果都从节点的外部工具直接发送到节点的 cassandra。

我的疯狂猜测/怀疑/问题是这些节点中的每一个都将充当协调节点,并同时负责根据主/分区键将数据分发/发送到其他节点。那正确吗?如果不是……会发生什么?

external_tool_to_cassandra

【问题讨论】:

    标签: apache-spark cassandra parallel-processing nodes distributed


    【解决方案1】:

    每个 Cassandra 节点都可以充当协调器。如果您的工具正确配置为使用 TokenAwarePolicy,您的工具应该为每个请求选择一个副本作为协调器,避免一些额外的网络跃点。如果您批量插入,请尝试将具有相同分区键的数据批处理在一起。

    请注意,在您的图表中,直接从 Spark 写入 Cassandra 将获得更好的性能。为此,您可以使用 spark-cassandra-connector。

    【讨论】:

    • 是的,所有节点都可以是协调者。但它们可以同时存在吗?所以,答案是肯定的!另外,通过说工具,我猜您通常是指工具而不是外部工具!所以基本上我不需要配置一些东西,因为正如他们在 datastax 中所说的那样:“如果你没有明确配置策略,你会得到默认值,这是一个数据中心感知、令牌感知策略”。我不使用批处理,只是插入。处理基本上由外部工具完成,spark 仅将文件路径通过管道传输到 shell 脚本(.sh),外部工具在每个节点中执行。
    • @Des0lat0r 不,如果您要求的是一个请求,则不能有多个协调员。客户端将选择 Cassandra 集群中的一个节点并将其用作协调器。哪个节点成为协调器取决于您使用的负载平衡策略。
    • 对于一个请求,是的,有一个协调员是有意义的。但基本上我说的是多个写入请求(如上图所示),同时来自每个节点。那可能吗??发生这种情况是因为在每个节点的外部工具中都有一个“插入”命令(在一个循环中),这意味着许多插入命令同时(同时)在每个节点中发生。
    • 是的,可以同时从不同的客户端发出多个请求,这些客户端都可以使用不同的协调器。但是他们使用哪个协调器仍然取决于您使用的负载平衡策略。如果您想要一些特定的行为,那么您可以编写自己的策略。
    • 非常感谢大家的宝贵时间!但是,让我更具体一点。基本上,只有一个客户端请求会生成许多写请求。用户想要处理一组文件,而我们想要处理他所询问的内容并将结果存储在 cassandra 中。具体来说,每个节点一个文件由外部工具处理。此处理在我们要并行存储在 cassandra 中的每个节点中产生不同的结果。所以,我的猜测是,每个节点都会同时充当协调者,并根据token范围将结果发送到对应的节点。对吧??
    猜你喜欢
    • 2015-11-18
    • 1970-01-01
    • 2016-01-22
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-21
    • 1970-01-01
    相关资源
    最近更新 更多