【问题标题】:Does nodetool cleanup affect Apache Spark rdd.count() of a Cassandra table?nodetool 清理是否会影响 Cassandra 表的 Apache Spark rdd.count()?
【发布时间】:2016-11-13 20:25:23
【问题描述】:

我一直在使用 Spark rdd.count() 跟踪一些大型 Cassandra 表的增长。 '到目前为止,预期的行为是一致的,行数不断增长。

今天我在其中一颗种子上运行nodetool cleanup,并且像往常一样运行了 50 多分钟。

现在 rdd.count() 返回它之前所做的三分之一的行......

我是否使用 nodetool cleanup 销毁数据?还是 Spark 计数不可靠并且正在计算幽灵键?我在清理过程中没有遇到任何错误,而且很多都没有显示任何异常。到目前为止,这似乎是一次成功的手术。

2016 年 11 月 13 日更新

事实证明,Cassandra 文档让我损失了 25 多万行数据。

The documentation 是明确的:

使用 nodetool status 来验证节点是否完全引导并 所有其他节点都已启动 (UN) 且未处于任何其他状态。毕竟新 节点正在运行,对之前的每个运行 nodetool cleanup 现有节点删除不再属于这些节点的密钥 节点。等待清理在一个节点上完成,然后再运行 下一个节点上的 nodetool 清理。

清理可以安全地推迟到低使用时间。

好吧,你通过nodetool status检查其他节点的状态,它们都是UP和Normal (UN),但是这里有一个问题,你还需要运行命令是nodetool describecluster您可能会发现架构未同步。

我的架构没有同步,我运行了清理,当所有节点都为 UN 时,按照文档正常启动和运行。 Cassandra 文档在添加新节点后没有提及nodetool describecluster

所以我兴高采烈地添加了节点,等到它们成为 UN (Up / Normal) 并运行清理。

因此,25+ 百万行数据消失了。我希望这可以帮助其他人避免这个危险的陷阱。基本上,Datastax 文档通过推荐 cleanup 作为添加新节点的过程中的一个步骤来设置您销毁数据。

在我看来,清理步骤应该完全从新的节点过程文档中删除。应该在其他地方提到,清理是一种很好的做法,但与添加新节点不在同一部分......这就像推荐 rm -rf / 作为病毒删除步骤之一。肯定会清除病毒...

感谢 Aravind R. Yarram 的回复,我得出了与您的回复相同的结论,并来到这里更新。感谢您的反馈。

【问题讨论】:

    标签: apache-spark cassandra nodetool


    【解决方案1】:

    我猜您可能在运行nodetool cleanup 之前从集群中添加/删除了节点或减少了复制因子。在您运行 cleanup 之前,我猜 Cassandra 仍然会将旧的键范围报告为 rdd.count() 的一部分,因为旧数据仍然存在于这些节点上。

    参考: https://docs.datastax.com/en/cassandra/2.0/cassandra/tools/toolsCleanup.html

    【讨论】:

    • 原来这正是发生的事情。这太令人沮丧了,Cassandra 文档说在添加节点后显式运行清理。
    猜你喜欢
    • 2019-09-02
    • 2014-08-24
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 2017-12-17
    • 2015-05-14
    • 2015-09-13
    相关资源
    最近更新 更多