我在hbase中有一个足够大的数据集,它需要几个小时才能在整个数据集上运行mapreduce作业。我希望能够打破使用预先计算的指标数据:每天一次映射整个数据集,并把它分解成多个索引:所有用户的以百万次扫描运行hbase mapreduce作业有意义吗?
- 1%的样品
- 所有用户谁正在参加特定的A/B实验
- 夜间预售频道上的所有用户。
- 与paticular插件(或任何标准,我们有兴趣在这一周)
我的想法是只存储行ID列表相关的记录,再后来人能做到的一点,所有用户在这些行上映射减少作业。但是1%的样本仍然是1M行数据,我不确定如何在一百万行列表上构建mapreduce作业。
如果将有一百万个不同的Scan对象组成查询,那么使用initTableMapperJob(List scan)创建一个表映射器作业是否有意义?还有其他方法可以做到这一点,以便我仍然可以有效地将计算和I/O消除到hbase群集?
大卫,这是很好的建议,我有如下问题: 我认为的一个hbase mapreduce的好处是地图作业可以在数据存储在hbase/hadoop中的相同节点上运行。这是真的?有没有一种方法来分割我的输入,以便这仍然是真实的,并尽量减少跨节点I/O? – bsmedberg
当然。它比具有TableInputFormat的标准M/R作业更简单,因为您将不得不以自定义输入格式自行设置节点关联。好消息是TableInputFormat是开源的,你应该能够从那里窃取大部分逻辑 – David