Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从HBase表中获取过去X小时的所有数据的最佳方法是什么?_Hbase - Fatal编程技术网

从HBase表中获取过去X小时的所有数据的最佳方法是什么?

从HBase表中获取过去X小时的所有数据的最佳方法是什么?,hbase,Hbase,我有写入HBase的事件流。每个事件都有user\u id、event\u timestamp和description 假设我需要运行一个ETL作业,该作业从表中检索过去12小时的所有数据。我考虑了两种获取数据的方法(我使用的是Java API): 使用setTimeStamp扫描方法 使用event\u timestamp作为行键前缀,但据我所知,这是一种不好的做法,因为它会导致热点 有更好的解决方案吗?您的第一种方法: 使用setTimeStamp扫描方法 听起来是个好主意。你完全正确,第二

我有写入HBase的事件流。每个事件都有
user\u id
event\u timestamp
description

假设我需要运行一个ETL作业,该作业从表中检索过去12小时的所有数据。我考虑了两种获取数据的方法(我使用的是Java API):

  • 使用
    setTimeStamp
    扫描方法
  • 使用
    event\u timestamp
    作为行键前缀,但据我所知,这是一种不好的做法,因为它会导致热点
  • 有更好的解决方案吗?

    您的第一种方法:

  • 使用
    setTimeStamp
    扫描方法
  • 听起来是个好主意。你完全正确,第二种方法:

  • 使用
    event\u timestamp
    作为行键前缀,但据我所知,这是一种不好的做法,因为它会导致热点
  • 将生成热点,因此不建议在HBase或Bigtable中使用

    一般来说,创建一个行键前缀单调递增(如时间、年-月-日等)或递减值(如
    INT_MAX
    -当前时间等)是非常有问题的,因此不建议这样做

    当然,您可以使用时间派生值作为行键的后缀:这样做的原因是避免将任何一行增长太大,因为行不会跨区域分割,而是作为一个原子单位保留

    在这种情况下,您将以多种方式表示时间:

  • 一次作为行键的后缀,它将是粗粒度的,例如,
    -yyyymmdd
  • 第二次作为单元值本身的时间戳,可以是:

    • 绝对时间,或
    • 相对于行的粗粒度时间后缀
  • 每种方法都有其优缺点,这取决于您的查询模式和特定用例。如果您想全局查询特定时间范围内的数据,那么使用绝对时间似乎是最好的,因为这样您就可以使用时间范围进行全局扫描,而无需创建复杂的行后缀过滤器