HBase 行键设计

Posted

技术标签:

【中文标题】HBase 行键设计【英文标题】:HBase Row Key Design 【发布时间】:2013-04-23 20:33:28 【问题描述】:

我在 Hbase 中创建了以下 Schema,

create 'test','lg'

put 'test','row1','lg:htype','get'
put 'test','row1','lg:ip','192.168.12.123' 
put 'test','row1','lg:stat','success'

对于这个 Schema,我想创建一个 rowkey。我的问题是如何在 hBase shell 中创建行键。

使用上述架构,我创建了列族。如何使用 hbase shell 定义行键。或者我需要像定义列族一样定义行键。如果是这样,HBase 如何区分它是列族成员,而该字段是行键。

我想将我的行键作为用户 ID 和时间戳的复合键。所以请告诉我如何通过 shell 在 hbase 中创建复合行键。

请帮忙。

【问题讨论】:

【参考方案1】:

在这种情况下,“row1”是您的行键。没有设计时指定行键的方法,因为对于 HBase,它们只是字节数组。要做任何比这更精彩的事情,您需要在应用程序代码(Java、ruby 脚本等)中完成。

如果您想以预定义行键结构的方式与 HBase 交互,您可以尝试 Phoenix,HBase 上的开源 SQL“皮肤”:

https://github.com/forcedotcom/Phoenix

(完全披露:Phoenix 项目最初是由我的雇主 Salesforce 创建的。)

【讨论】:

【参考方案2】:

正如 Ian 所说,您不需要“创建”行键,无论您写什么作为行键都将是行键,它只是一个字节数组,所以任何事情都会发生。

您仍然需要仔细考虑什么是适合您的行键。当您这样做时,您需要考虑您为数据计划的访问模式以及 hbase 表的结构方式,例如键在磁盘上按字典顺序排列,每个存储的值都有一个时间戳,限定符被分组到列族等中。

【讨论】:

以上是关于HBase 行键设计的主要内容,如果未能解决你的问题,请参考以下文章

HBase 行键设计

hbase 的最佳行键设计

HBase 模式行键设计 - 增量计数器?

hbase 利用rowkey设计进行多条件查询

Hbase 性能行键与列限定符

HBASE表设计