1

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

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

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

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

4

1 回答 1

2

Netflix Techblog上最近的一篇文章介绍了 Aegisthus,这是一个项目,它读取存储在集群中磁盘上的 SSTable,并将它们合并为一个单一的、一致的数据视图(在 MapReduce 中)。我想这些机制会很容易地存在,用于在单个节点上生成数据视图。

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

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

于 2012-03-29T07:57:57.923 回答