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 行键设计的主要内容,如果未能解决你的问题,请参考以下文章