基于特定HFile作为根的HBase扫描

时间:2019-02-14 08:00:00

标签: java mapreduce hbase hfile

是否存在具有以下行为的Scan / Filter API?

鉴于时间范围,我希望扫描仪将HFile中的数据包含在范围之外,以用于HFile中包含的行键。 这个想法是扫描所有HFile的内存索引,但是仅从磁盘中获取范围内HFile的行键的数据。

例如,如果HFile1在范围内并且HFile2在范围之外,并且rowkey1HFile1中有任何数据,我想获取也来自rowkey1的{​​{1}},就好像它在范围内一样。 另一方面,如果HFile2中包含rowkey2,但HFile2中未包含HFile1,则索引扫描器应仅跳至下一行键。

用例是加载最近X个小时内修改过的整行(即使是仅一列),以避免完全扫描或对冗余数据进行任何磁盘扫描。 这可能会基于TableSnapshotInputFormat集成到Spark / MR应用程序中,所以我想我可以为HRegion,HStore或其他任何东西提供一些自定义代码。

非常感谢

1 个答案:

答案 0 :(得分:2)

如果是用例,

  

用例是加载已修改的整个行(即使只是   一列)在最近的X个小时内,避免进行全面扫描或任何磁盘   扫描冗余数据

为什么使用时间戳扫描范围不起作用? HBase JAVA API org.apache.hadoop.hbase.client.Scan.setTimeRange(long, long)以一个时间范围作为输入,并获取仅在该时间范围内修改的行。

如果您希望它更加灵活,请应用KeyOnlyFilter()并获取所有行键。稍后,您可以根据行数进行批处理Get