【发布时间】: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