我已经实现了一个迭代器(扩展WrappingIterator),它执行一些简单的统计聚合和重写键和值。本质上,我从这种形式的键开始:
key qualifier:family value
<id> <val1>|<val2>:<time_info> <statistic>
我对列族进行聚合,并重写为以下格式(随时间汇总统计数据,并推导出新的统计数据)
key qualifier:family value
<id> <val1>:<val2> <derived-statistics>
此自定义迭代器仅在扫描时应用于表,并且一直运行良好,但性能开始成为问题。我已经考虑过以下提高性能的方法:
1)有没有办法在压缩时应用这个迭代器?我的想法是答案是“不”,因为如果迭代器在桌面上进行扫描,那么扫描就不会知道迭代器源(即原始行或重写行)正在读取哪种数据格式。如果有办法做到这一点,那就太好了。
2)是否有一种简单的方法可以将表复制到新表(应用了自定义迭代器),以便新表包含聚合数据?我真的不想做地图减少工作......
3)我应该看一下这样做的其他方法吗?
感谢您提出的所有建议。
答案 0 :(得分:2)
简短的回答是肯定的,你可以在压实时做到这一点。但是,有一些警告。
使用新表执行此类操作的典型方法是克隆表,添加主要的压缩迭代器,然后触发完整的主要压缩。
另一种方法是执行MapReduce从一个表输入并输出到另一个表。