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

  • 所有用户的1%样本
  • 参加特定A / B实验的所有用户
  • 每晚预发行 channel 中的所有用户。
  • 所有具有特定插件(或本周我们感兴趣的标准)的用户

    我的想法是只存储相关记录的行ID列表,然后人们只能在这些行上执行很少的mapreduce工作。但是1%的样本仍然是100万行数据,我不确定如何在一百万行的列表上构造mapreduce作业。

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

    最佳答案

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

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

  • 10-06 01:17