nodetool 清理会影响 Cassandra table 的 Apache Spark rdd.count() 吗?

Does nodetool cleanup affect Apache Spark rdd.count() of a Cassandra table?

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

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

现在 rdd.count() returns 原来行的三分之一....

我是否使用 nodetool cleanup 破坏了数据?或者是 Spark 计数不可靠并且正在计算幽灵键?我在清理过程中没有发现任何错误,而且很多东西都没有显示出任何异常。直到现在,它看起来确实是一个成功的操作。

更新2016-11-13

原来是 Cassandra 文档让我丢失了 25+ 百万行数据。

The documentation 显式:

Use nodetool status to verify that the node is fully bootstrapped and all other nodes are up (UN) and not in any other state. After all new nodes are running, run nodetool cleanup on each of the previously existing nodes to remove the keys that no longer belong to those nodes. Wait for cleanup to complete on one node before running nodetool cleanup on the next node.

Cleanup can be safely postponed for low-usage hours.

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

我的模式没有同步,我 运行 清理,当所有节点都是 UN 时,根据文档正常启动和 运行ning。添加新节点后,Cassandra 文档没有提及 nodetool describecluster

所以我愉快地添加了节点,等到它们是 UN(Up / Normal)和 运行 清理。

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

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

谢谢 Aravind R. Yarram 的回复,我和你的回复得出了相同的结论,所以来这里更新。感谢您的反馈。

我猜您可能在 运行 宁 nodetool cleanup 之前从集群中获得了 added/removed 个节点或减少了复制因子。在您 运行 cleanup 之前,我猜 Cassandra 仍然将旧密钥范围报告为 rdd.count() 的一部分,因为这些节点上仍然存在旧数据。

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