【问题标题】:HBase Scan based on specific HFile(s) as roots基于特定 HFile(s) 作为根的 HBase 扫描
【发布时间】:2019-02-14 07:59:59
【问题描述】:

是否有任何具有以下行为的扫描/过滤 API?

给定时间范围,我希望扫描仪包含来自 HFiles 超出范围的数据,用于 HFiles 中包含的行键在范围内。 这个想法是扫描所有 HFile 的内存索引,但只从磁盘中获取范围内 HFile 中的行键的数据。

例如,如果HFile1 在范围内且HFile2 超出范围,并且rowkey1HFile1 中有任何数据,我想从HFile2 中获取rowkey1 的所有列为好吧,好像它在范围内。 另一方面,如果rowkey2 包含在HFile2 中但不包含在HFile1 中,则索引扫描器应该只跳到下一个行键。

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

非常感谢

【问题讨论】:

    标签: java mapreduce hbase hfile


    【解决方案1】:

    如果这是用例,

    用例是加载被修改的整行(即使只是 一列)在过去 X 小时内,避免完全扫描或任何磁盘 冗余数据扫描

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

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

    【讨论】:

    • 感谢您的回答。 setTimeRange 不起作用,因为它只获取修改后的列,我需要 整个 行。我们已经做了类似于您对批处理 Get 建议的操作,这正是我尝试优化的过程:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 2015-07-16
    • 2012-10-18
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    相关资源
    最近更新 更多