如何访问Cassandra节点的本地数据

从我对Cassandra的了解不多,似乎数据局部性对于访问节点的客户端应用程序来说应该是透明的。

但是,如果我明确只想访问我所连接的节点本地的列族数据,该怎么办? 这样的事情可能吗? 我还没有找到一种从客户端API开箱即用的方法,但似乎我可以通过系统表获取一些这些信息,但我无法弄清楚如何做到这一点。

这个想法是执行mapreduce,但不使用Hadoop。 本地客户端将连接到其本地cassandra节点,对本地数据执行聚合,然后将其传递回上游。

这样的事情有可能吗? 从它的外观来看,似乎有可能因为我已经看到Hadoop能够使用Cassandra的证据,但这些例子似乎是针对Hadoop而不是通用客户端。 本地客户端(与Casandra交谈)将使用Java。 我目前正在使用Hector,但我不确定它是否会提供任何数据位置信息。

最近一篇关于Netflix Techblog的文章介绍了Aegisthus,这个项目读取存储在整个集群磁盘上的SSTables,并将它们合并为一个统一的数据视图(在MapReduce中)。 我可以想象,这些机制可以简单地存在,用于在单个节点上生成数据视图。

不幸的是,我认为他们还没有开源这个工具,所以你将无法使用它。 在这一点上最多的是一个微光,是的,它可以使用非Cassandra代码本地读取SSTables。

您可以使用Cassandra源来一起破解某些东西,这些源代码可以读取SSTables并将其提供给您希望构建的本地客户端。 一个很好的起点是查看在sstable2json工具中使用的org.apache.cassandra.tools.SSTableExport的源代码。