【发布时间】:2012-05-29 21:27:19
【问题描述】:
我们正在考虑使用 HBase 进行实时分析。
在 HBase 之前,我们将在我们的日志文件上运行 Hadoop Map Reduce 作业并聚合数据,并将细粒度的聚合结果存储在 HBase 中,以便对聚合数据进行实时分析和查询。因此,HBase 表将具有预先聚合的数据(按日期)。
我的问题是:如何最好地设计 HBase 数据库的架构和主键设计,以实现快速但灵活的查询。
例如,假设我们在数据库中存储以下行:
timestamp, client_ip, url, referrer, useragent
假设我们的 map-reduce 作业产生三个不同的输出字段,我们希望将每个输出字段存储在一个单独的“表”(HBase 列族)中:
- 日期、操作系统、浏览器
- 日期、网址、推荐人
- 日期、网址、国家/地区
(我们的 map-reduce 作业从用户代理和 client_ip 数据中获取操作系统、浏览器和国家/地区字段。)
我的问题是:我们如何构建 HBase 架构以允许对这些字段中的任何一个或组合进行快速、近实时和灵活的查找?例如,用户必须能够指定:
- operating_system by date(“此日期范围内有多少 iPad 用户?”)
- 按国家和日期列出的网址(“上个月有多少用户从该国家/地区访问此网址?”)
基本上还有其他自定义查询?
我们应该使用这样的键吗:
- date_os_browser
- date_url_referrer
- date_url_country
如果是这样,我们可以完成上面指定的查询吗?
【问题讨论】:
标签: hadoop primary-key analytics hbase schema-design