我遇到了与Cassandra system.hints table is empty even when the one of the node is down相同的问题:
我正在从academy.datastax.com学习Cassandra。我正在本地计算机上尝试复制和一致性演示。 RF = 3且一致性= 1。
当我的Node3关闭并且我使用update命令更新我的表时,SYSTEM.HINTS表应该存储node3的提示但它总是为空。
@amalober指出,这是因为Cassandra版本的使用存在差异。来自DataStax的Cassandra文档:
在Cassandra 3.0及更高版本中,提示存储在每个节点上的本地提示目录中,以改进重播。
同样的问题是3年前提出的,How to access the local data of a Cassandra node,但接受的解决方案是
...使用Cassandra源代码将某些内容整合在一起,这些源代码可以读取SSTables并将其提供给您希望构建的本地客户端。一个很好的起点是查看在sstable2json工具中使用的org.apache.cassandra.tools.SSTableExport的源代码。
是否有更简单的方法来访问Cassandra节点的本地提示目录?
答案 0 :(得分:6)
是否有更简单的方法来访问Cassandra节点的本地提示目录?
提示目录在$CASSANDRA_HOME/conf/cassandra.yaml
文件中定义(有时它也位于/etc/cassandra
下,具体取决于您安装Cassandra的方式)
查找属性hints_directory
答案 1 :(得分:1)
我猜你正在使用ccm。因此,提示文件应位于$CASSANDRA_HOME/.ccm/yourcluster/yournode/hints
目录
答案 2 :(得分:0)
我还没有获得提示文件,无法重现您的问题。我所做的每一次尝试都按预期产生了提示文件。现在有一种方法可以更轻松地查看提示。
我们在sstable-tools中添加了一个转储,您可以使用它来查看HH文件中的突变。我们将来可能会增加在shell中使用像sstables这样的HH文件的能力(使用突变来构建memtable并包含在查询中)但是现在它非常原始。
如果您想自己分析数据,那么它非常简单(没有元数据设置)。您可以在此处查看我们所做的工作,并根据您的需求进行更改:https://github.com/tolbertam/sstable-tools/blob/master/src/main/java/org/apache/cassandra/hints/HintsTool.java#L39