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



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

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

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

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

例如,我想将任务划分为16个作业。由于RandomPartitioner是基于MD5的(根据我所读到的内容),我想查询从a开始的第一个范围的所有内容。换句话说,我该如何在MD5上查询以a开头、在b之前结束的get_range。例如a0000000000000000000000000000000 - afffffffffffffffffffffffffffffff

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

我会作弊一点:

  1. 创建新行job_(n),每列表示所需范围中的每一行关键字
  2. 从该特定行中提取所有列,以指示应从CF中提取哪些行

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

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

这就是Mahout CassandraDataModel示例的功能:

  • https://github.com/apache/mahout/blob/trunk/integration/src/main/java/org/apache/mahout/cf/taste/impl/model/cassandra/CassandraDataModel.java

一旦你有了数据,可以提取你感兴趣的行,你就可以把它交给你的MR工作。

或者,如果速度不是问题,可以考虑使用PIG:如何使用Cassandra';使用或不使用清管器的s Map Reduce?

相关内容

  • 没有找到相关文章

最新更新