我想处理MapReduce作业中列族中的所有数据。订购并不重要。
一种方法是迭代列族的所有行键以用作输入。这可能是瓶颈,可以用并行方法取代。
我愿意接受其他建议,或者有人告诉我,我正在浪费时间来处理这个想法。我正在调查以下内容:
一种更有效的方法是为输入分配范围,而不是迭代所有行键(在映射器启动之前)。由于我使用的是RandomPartitioner
,有没有办法根据MD5指定要查询的范围?
例如,我想将任务分成16个作业。由于RandomPartitioner
是基于MD5的(根据我的阅读),我想查询以a
开头的所有内容。换句话说,我如何查询MD5上的get_range,其开头为a
,并在b
之前结束。例如a0000000000000000000000000000000 - afffffffffffffffffffffffffffffff
?
我正在使用pycassa API(Python),但我很高兴看到Java示例。
答案 0 :(得分:1)
我有点作弊:
我是这样做的。来自特定国家/地区的用户会在特定国家/地区的行中获得列。具有特定年龄的用户也会添加到特定行。
允许我根据我想要的标准快速拉出我需要的行,与拉动所有内容相比,效率更高。
这是Mahout CassandraDataModel示例的功能:
获得数据并可以拉出您感兴趣的行后,您可以将其交给MR作业。
或者,如果速度不是问题,请查看使用PIG:How to use Cassandra's Map Reduce with or w/o Pig?