【发布时间】:2012-12-13 21:59:52
【问题描述】:
我正在研究 Cassandra Hadoop 集成 (MapReduce)。我们使用RandomPartitioner 插入数据以获得更快的写入速度。现在我们必须在 MapReduce 中从 Cassandra 读取该数据并对其执行一些计算。
从我们在 cassandra 中拥有的大量数据中,我们只想获取特定行键的数据,但由于 RandomPartitioner 我们无法做到这一点 - 代码中有一个断言。
谁能指导我如何根据 Cassandra 级别本身的行键过滤数据(我知道数据使用行键的哈希分布在各个区域)?
使用二级索引(仍在尝试了解它们的工作原理)会解决我的问题还是有其他解决方法?
我想使用 cassandra MR 对存储在 cassandra 中的数据连续计算一些 KPI。所以这里每次都从 cassandra 获取整个数据对我来说似乎是一种开销?我使用的 rowkey 就像 "(timestamp/60000)_otherid";此 CF 包含对存储在其他 CF 中的实际数据的行键的引用。因此,为了计算 KPI,我将工作一分钟并从其他 CF 获取数据并进行处理。
【问题讨论】:
-
您是在编写自己的 InputFormat 还是使用 Cassandra 的?
-
@tysonjh 我正在使用 Cassandra MR 提供的默认 InputFormat - ColumnFamilyInputFormat.java。
-
@All 让我分享更多细节。我想使用 cassandra MR 来计算一些 KPI 的数据,这些数据连续存储在 cassandra 中。所以这里每次都从 cassandra 获取整个数据对我来说似乎是一种开销?我使用的 rowkey 就像 "(timestamp/60000)_otherid";此 CF 包含对存储在其他 CF 中的实际数据的行键的引用。因此,为了计算 KPI,我将工作一分钟并从其他 CF 获取数据并进行处理。
-
@AyushV 我在这里没有看到问题...您已经在
timestamp/60000_otherid列族中使用二级索引从其他 CF 获取数据。您不会获取所有数据,而是根据您的索引 CF 获取您感兴趣的时间范围内的数据。假设你可以随意生成这个otherid,你可以模拟一个范围切片来创建你的 MapR 分割。 -
您想按列范围获取。如果您的键只是存储桶,那么列名就是您所关心的。
标签: hadoop mapreduce cassandra