运行带有一百万次扫描的hbase mapreduce工作是否有意义?

时间:2014-02-11 21:56:29

标签: hadoop mapreduce hbase

我在hbase中有一个足够大的数据集,在整个数据集上运行mapreduce作业需要几个小时。我希望能够使用预先计算的索引来分解数据:每天一次映射整个数据集并将其分解为多个索引:

  • 所有用户的1%样本
  • 参与特定A / B实验的所有用户
  • 夜间预售渠道中的所有用户。
  • 所有具有特定插件的用户(或本周我们感兴趣的任何标准)

我的想法是只存储相关记录的行ID列表,然后人们可以在这些行上做一些mapreduce作业。但1%的样本仍然是1M行的数据,我不知道如何在一百万行的列表上构建mapreduce作业。

如果将有一百万个不同的扫描对象组成查询,使用initTableMapperJob(列表扫描)创建表映射器作业是否有意义?还有其他方法可以做到这一点,这样我仍然可以有效地将计算和I / O分配给hbase集群吗?

1 个答案:

答案 0 :(得分:1)

不要进行一百万次扫描。如果你有一百万个非连续的id,你可以使用自定义输入格式在id列表上运行map / reduce作业,这样你就可以将列表分成合理数量的分区(我猜你的数量是你的4倍) m / r插槽,但该数字不是基于任何东西)。这将为您提供一百万次获取操作,这可能比一百万次扫描更好。

如果你有幸拥有更合理数量的连续范围,那么扫描会比直接获得更好