使用MapReduce作业有效地处理Cassandra列族中的所有数据

时间:2012-02-06 02:41:22

标签: mapreduce cassandra

我想处理MapReduce作业中列族中的所有数据。订购并不重要。

一种方法是迭代列族的所有行键以用作输入。这可能是瓶颈,可以用并行方法取代。

我愿意接受其他建议,或者有人告诉我,我正在浪费时间来处理这个想法。我正在调查以下内容:

一种更有效的方法是为输入分配范围,而不是迭代所有行键(在映射器启动之前)。由于我使用的是RandomPartitioner,有没有办法根据MD5指定要查询的范围?

例如,我想将任务分成16个作业。由于RandomPartitioner是基于MD5的(根据我的阅读),我想查询以a开头的所有内容。换句话说,我如何查询MD5上的get_range,其开头为a,并在b之前结束。例如a0000000000000000000000000000000 - afffffffffffffffffffffffffffffff

我正在使用pycassa API(Python),但我很高兴看到Java示例。

1 个答案:

答案 0 :(得分:1)

我有点作弊:

  1. 创建新行job_(n),每列代表您想要的范围内的每个行键
  2. 从该特定行拉出所有列以指示应从CF
  3. 中提取哪些行

    我是这样做的。来自特定国家/地区的用户会在特定国家/地区的行中获得列。具有特定年龄的用户也会添加到特定行。

    允许我根据我想要的标准快速拉出我需要的行,与拉动所有内容相比,效率更高。

    这是Mahout CassandraDataModel示例的功能:

    获得数据并可以拉出您感兴趣的行后,您可以将其交给MR作业。

    或者,如果速度不是问题,请查看使用PIG:How to use Cassandra's Map Reduce with or w/o Pig?