2016-11-12 42 views
0

我一直在使用Spark rdd.count()跟踪一些大型Cassandra表的增长。直到现在,预期的行为是一致的,行数不断增长。nodetool清理是否影响Cassandra表的Apache Spark rdd.count()?

今天我跑了nodetool cleanup其中一个种子,并像往常一样跑了50+分钟。

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

难道我毁使用nodetool清理数据?还是Spark计数不可靠,并计算了幽灵键?在清理过程中我没有遇到任何错误,很多情况下并没有显示出正常情况。直到现在,它确实看起来像是一次成功的手术。

更新2016年11月13日

原来卡桑德拉文档集我为超过2500万行数据的丢失。

The documentation是明确的:

使用nodetool状态验证节点完全自举和 所有其他节点均达到(UN)而不是任何其他国家。在所有新的 节点正在运行后,在先前的 现有节点的每个上运行节点工具清除,以删除不再属于这些节点的密钥。在运行 nodetool清理下一个节点之前,等待清理在一个节点上完成。

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

那么你通过nodetool status检查其它节点的状态,他们都和正常(UN),但这里的渔获物,你还需要运行该命令nodetool describecluster,你可能会发现,模式未同步。

我的模式没有同步,当所有节点都是UN时,我运行清理,按照文档正常运行。 Cassandra文档在添加新节点后没有提及nodetool describecluster

所以我快活地添加了节点,一直等到UN(正常),然后运行清理。

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

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

谢谢你Aravind R.亚拉姆你的答复,我得出了同样的结论作为你的答复,并来到这里更新。感谢您的反馈。

回答

1

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

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

+0

原来,这是发生了什么事。这非常令人沮丧,Cassandra文档说在添加节点后显式运行清理。 –