从我对Cassandra的了解不多,似乎数据局部性对于访问节点的客户端应用程序来说大部分都是透明的。
但是,如果我明确只想访问我所连接的节点本地的列族数据,该怎么办?这样的事情可能吗?我还没有找到得到这个从客户端API外的即装即用的方式,但似乎我能得到一些通过该系统表的信息,但我不能完全弄清楚如何做到这一点
这个想法是执行mapreduce,但不使用Hadoop。本地客户端将连接到其本地cassandra节点,对本地数据执行聚合,然后将其传回上游。
这样的事情有可能吗?从它的外观来看,似乎有可能因为我已经看到Hadoop能够使用Cassandra的证据,但这些例子似乎是针对Hadoop而不是通用客户端。本地客户端(与Casandra交谈)将使用Java。我目前正在使用Hector,但我不确定它是否会提供任何数据位置信息。
答案 0 :(得分:2)
Netflix Techblog上的recent article介绍了Aegisthus,这是一个项目,它读取存储在整个集群的磁盘上的SSTable,并将它们合并到一个统一的数据视图中(在MapReduce中)。我想可以简单地存在一些机制,用于在单个节点上生成数据视图。
不幸的是,我认为他们还没有开源这个工具,所以你将无法使用它。在这一点上最多的是一个微光,是的,它可以使用非Cassandra代码本地读取SSTable。
您可以使用读取SSTables的Cassandra源并将其提供给您希望构建的本地客户端。一个很好的起点是查看org.apache.cassandra.tools.SSTableExport
工具中使用的sstable2json
的来源。