我在hbase中有一个足够大的数据集,在整个数据集上运行mapreduce作业需要几个小时。我希望能够使用预先计算的索引来分解数据:每天一次映射整个数据集并将其分解为多个索引:
我的想法是只存储相关记录的行ID列表,然后人们可以在这些行上做一些mapreduce作业。但1%的样本仍然是1M行的数据,我不知道如何在一百万行的列表上构建mapreduce作业。
如果将有一百万个不同的扫描对象组成查询,使用initTableMapperJob(列表扫描)创建表映射器作业是否有意义?还有其他方法可以做到这一点,这样我仍然可以有效地将计算和I / O分配给hbase集群吗?
答案 0 :(得分:1)
不要进行一百万次扫描。如果你有一百万个非连续的id,你可以使用自定义输入格式在id列表上运行map / reduce作业,这样你就可以将列表分成合理数量的分区(我猜你的数量是你的4倍) m / r插槽,但该数字不是基于任何东西)。这将为您提供一百万次获取操作,这可能比一百万次扫描更好。
如果你有幸拥有更合理数量的连续范围,那么扫描会比直接获得更好