Java 基于特定HFile作为根的HBase扫描
是否存在具有以下行为的扫描/筛选API 给定时间范围,我希望扫描器包含超出范围的HFiles中的数据,用于范围内HFiles中包含的行键。 其思想是扫描所有HFiles的内存索引,但仅从磁盘获取范围内HFiles的行键的数据 例如,如果Java 基于特定HFile作为根的HBase扫描,java,mapreduce,hbase,hfile,Java,Mapreduce,Hbase,Hfile,是否存在具有以下行为的扫描/筛选API 给定时间范围,我希望扫描器包含超出范围的HFiles中的数据,用于范围内HFiles中包含的行键。 其思想是扫描所有HFiles的内存索引,但仅从磁盘获取范围内HFiles的行键的数据 例如,如果HFile1在范围内而HFile2在范围外,并且rowkey1在HFile1中有任何数据,我想从HFile2中获取rowkey1的所有列,就好像它在范围内一样。 另一方面,如果HFile2中包含rowkey2,但不包含在HFile1中,则索引扫描程序应直接跳到下一
HFile1
在范围内而HFile2
在范围外,并且rowkey1
在HFile1
中有任何数据,我想从HFile2
中获取rowkey1
的所有列,就好像它在范围内一样。
另一方面,如果HFile2
中包含rowkey2
,但不包含在HFile1
中,则索引扫描程序应直接跳到下一行键
用例是加载过去X小时内修改过的整行(即使只有一列),避免对冗余数据进行完全扫描或任何磁盘扫描。
这将被集成到Spark/MR应用程序中,可能基于TableSnapshotInputFormat,所以我想我可以为HRegion、HStore或其他任何应用程序提供一些定制代码
非常感谢如果这是使用案例 用例是加载修改过的整行(即使是在 一列),避免完全扫描或任何磁盘 冗余数据扫描 为什么带有时间戳范围的扫描不起作用?HBase JAVA API
org.apache.hadoop.HBase.client.Scan.setTimeRange(long,long)
将一个时间范围作为输入&它只获取在此时间范围内修改的行
如果希望它更灵活,则应用
KeyOnlyFilter()
并获取所有行键。稍后,您可以基于行计数执行批处理Get
谢谢你的回答setTimeRange
将不起作用,因为它只获取修改过的列,而我需要整行。我们已经做了类似于您建议的批处理Get
,这正是我尝试优化的过程:)