2012-02-13 47 views
1

从我对Cassandra的一点理解中,似乎数据局部性对访问节点的客户端应用程序来说基本上是透明的,因为它应该如此。如何访问Cassandra节点的本地数据

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

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

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

+1

下面是我们要求您备份并告诉我们您的目标是什么的地方。 :)如果你想扫描所有的数据,使用locality,map/reduce或类似的,可以完成。否则,我不确定访问大部分随机数据子集有什么好处。 – jbellis 2012-02-13 23:11:30

+0

你是对的,这正是我想到的,对于map/reduce或类似的东西,除非它不是Hadoop。每个Cassandra节点将有一个客户端,因此每个客户端只能访问该节点的本地数据至关重要。 我知道这可能不是最有意义的,但它确实在我尝试实现的背景下进行。 – wombat 2012-02-14 02:58:18

回答

2

A recent article在Netflix Techblog上引入了Aegisthus,它是一个读取存储在整个集群磁盘上的SSTables并将它们合并为一个单一的,一致的数据视图(在MapReduce中)的项目。我可以想象,这些机制可以轻而易举地在单个节点上生成数据视图。

不幸的是,我不认为他们已经开源了这个工具,所以你将无法使用它。在这一点上最多的可能是闪烁,是可以使用非Cassandra代码本地读取SSTables。

您可能能够使用读取SSTables的Cassandra源代码一起破解一些东西,并获得您希望构建的本地客户端。一个很好的起点是寻找在sstable2json工具中使用的org.apache.cassandra.tools.SSTableExport的来源。