Hadoop 实时时间序列新表的Hbase模式设计

Hadoop 实时时间序列新表的Hbase模式设计,hadoop,nosql,hbase,Hadoop,Nosql,Hbase,我在hbase表中有一些域数据,例如页面等。我必须每周实时显示其统计数据,例如文件数量、无效/有效文件等。 为此,我考虑为这些统计数据创建另一个Hbase表。MR作业将在处理原始表后更新此新表以获取新的星期统计信息。现在,我的新表的模式应该是什么。这是正确的方法吗? 我必须实时可视化前100个域(需要一些排序) 此外,还预计数据将随着时间的推移而增长 domain, week1-docs, week2-docs,week3-docs ... 您可以使用这种方法来存储数据,因为您可以在HBase

我在hbase表中有一些域数据,例如页面等。我必须每周实时显示其统计数据,例如文件数量、无效/有效文件等。 为此,我考虑为这些统计数据创建另一个Hbase表。MR作业将在处理原始表后更新此新表以获取新的星期统计信息。现在,我的新表的模式应该是什么。这是正确的方法吗? 我必须实时可视化前100个域(需要一些排序)

此外,还预计数据将随着时间的推移而增长

domain, week1-docs, week2-docs,week3-docs ...
您可以使用这种方法来存储数据,因为您可以在HBase中存储基本上不受限制的列,但我更喜欢以下方法:

domain_week_id [row_key], week-docs 
例如

domainName_2019_24, {docs data}
通过这种方式,您可以更有效地获取特定的一周,而且它的扩展性也会更好


您还可以指定具有所需周间隔的行键范围,它将从这些周获取所有文档。

根据您希望从HBase获取数据的方式,您有几种可能性。事实上,由于HBase提供了行键的自动字典排序,您可以改进
Get
Scan
操作,如下所示:

1) 你将对一周内的所有领域感兴趣

[rowKey] -> [colName0] = [colValue0], ...
"2019-01" -> domain0 = "{data for domain0}", domain1 = "{data for domain1}"
...
"2019-52" -> ...
在这种情况下,您可以使用
Get
操作获取给定周内所有域的数据,也可以使用
Scan
操作获取多周内所有域的数据

2) 您将在几个星期内一次对一个域感兴趣

[rowKey] -> [colName0] = [colValue0], ...
"domain0_2019-01" -> data = "{data for domain0 on week 1}"
...
"domain0_2019-52" -> data = "{data for domain0 on week 52}"
"domain1_2019-01" -> data = "{data for domain1 on week 1}"
...
在这种情况下,您可以通过相应地构建一个
get
来获取单个域一周的数据,或者通过使用部分
START\u行
END\u行
进行
Scan
来获取给定域所有(或子集)周的数据。例如,使用一个
START\u ROW=“domain0\u 2019”
和一个
STOP\u ROW=“domain0\u 2020”
扫描将为您提供整个2019年的域0数据

3) 你将在一个星期和一个领域的时间感兴趣

[rowKey] -> [colName0] = [colValue0], ...
"2019-01_domain0" -> data = "{data for domain0 on week 1}"
"2019-01_domain1" -> data = "{data for domain1 on week 1}"
...
"2019-52_domain0" -> data = "{data for domain0 on week 52}"
"2019-52_domain1" -> data = "{data for domain1 on week 52}"
...
此方法与第一种方法类似,但根据实际列中要存储多少数据而有所不同。这种方法更倾向于使用
Get
操作来获取特定域特定周的数据

如果只使用
Get
操作或还需要
Scan
数据等,则可以考虑其他因素,这实际上取决于您希望如何从HBase表中提取数据

[rowKey] -> [colName0] = [colValue0], ...
"2019-01_domain0" -> data = "{data for domain0 on week 1}"
"2019-01_domain1" -> data = "{data for domain1 on week 1}"
...
"2019-52_domain0" -> data = "{data for domain0 on week 52}"
"2019-52_domain1" -> data = "{data for domain1 on week 52}"
...