背景
工作中有很多使用HBase作为批处理源和目标的场景。之前已经做过很多优化措施,基本原则就是减少对RegionServer的影响,特别是降低RegionServer GC的时间,比如写入时先写HFile再BulkLoad、使用Filter尽量只读取需要的行和列、使用G1GC等等。但是读取HBase表数据要通过RegionServer的堆,在大批量处理的程序中可能会带来长时间GC的情况。
能不能绕过RegionServer直接读HFile中的数据呢?曾经考虑过直接从HFDS读取HFile中的数据,但是要自己去处理文件合并、数据版本、Filter等,将是一个非常复杂的工程。
直到一次机会在HBase Con Asia中看到有不少公司在使用一个Feature解决这个问题,就是HBASE-8369 MapReduce over snapshot files,支持0.98及以上版本。
介绍
特点
- 对RegionServer不产生压力!
通过快照的链接文件读取对应HFile中的数据,数据不再经过RegionSer