HBase设计之rowkey设计

       HBase应用场景非常广泛;社区前面有一系列文章。大家可以到社区看看看;张少华同学本篇主要讲HBASE最重要的一个基础知识,rowkey的涉及,非常赞!大力推荐!

      社区系列文章:

新数仓系列:HBase关键能力和特性梳理

HBase 和 Cassandra的浅谈

新数仓系列:Hbase周边生态梳理(1)




HBase由于其存储和读写高性能,在实时查询中越来越发挥重要的作用,但是由于其属于NOSQL数据库类型,对于关系型数据并不适用。HBase查询只能通过其rowkey来查询(我们可以认为是HBase中表的唯一索引)。所以rowkey的设计在使用HBase的设计中尤为重要,另外rowkey设计也关乎到数据库中数据的存放位置,若rowkey设计不当,在HBase分区中,会引发数据热点(hotspot)问题出现,即数据访问集中在某个节点或者region,最终会导致性能降低或者region由于负载大而不可用。

为了防止在写的操作时出现数据热点,在设计rowkey时应该让数据尽可能同时写入多个region,下面介绍几种常见的rowkey设计方式。

1

1 . Salt

SaltingHBase中的应用是将每一个rowkey前缀指定一随机字符,这样就使得数据在分散在多个不同的region,达到均衡负载。

HBase中表region按照每个字母前缀来区分,我们来对比rowkey salt前后的变化,首先我们给一组未salt前的rowkey

rk001

rk002

rk003

上述rowkey根据分区来看是在同一个region中,下面我们对上述rowkeysalt处理:

a-rk001

b-rk002

c-rk003

经过处理的rowkey,数据分布在3region中,理论上此时的吞吐量是未处理之前的3倍。由于前缀是随机的在读这些数据时若要按照字典序查找则需要耗费更多的时间(可能对每个region服务器发起请求),所以salt增加了写操作的吞吐量,但却增加了读操作的开销。

 

2


2 .Hash散列

hash 散列来替代随机指派前缀,能使一个给定的行在salt时有相同的前缀,从某种程度上说,这在分散了RegionServer间的负载的同时,也允许在读操作时能够预测。确定性hashdeterministic hash )能让客户端重建完整的rowkey,可以用get操作直接获取想要的行。

例如将上述的3rowkey(未salt)经过hash处理,此处我们采用MD5散列算法,结果如下

f18a79a8eb39267173fd0d113e3282f4

277ba32a1610268cdb7733192010c127

bd1258481401ea1be6377c5aaeae3a1f

若以首个字符作为不同分区,上面几个数据均衡分布在3region中。下面是我们实际的一个数据在各个分区的分布情况:

在上图的16个分区中,数据基本实现均衡分布,当数据量越来越大的时候,分区的这种均衡会更平衡。

 

上面介绍的两种rowkey常用的rowkey设计方法。由于在HBase中数据存储是k-v形式,若在HBase中同一表的同一列插入相同rowkey(除自带版本),则原先的数据会被覆盖掉,所以为了保证rowkey的唯一性,在实际的设计中我们可能更多的是结合多种设计方法来实现rowkey的最大优化设计,比如MD5+salt

HBase的数据读取主要通过rowkey来查询获取数据,我们可以借助HivePhoenix等通过SQL方式获取数据,也可以将索引数据存放在SolrElestaticSearch中,间接的查询数据,但是这样的方式都没有通过rowkey来直接查询数据的性能高,同时实时性也不高,所以我们在rowkey设计时我们应该包含更多可用信息。这里我们参考了《大数据之路—阿里巴巴大数据实践》一书中讲到的设计规则

设计规则:MD5+主维度+维度标识+子维度1+时间维度+子维度2

例如:卖家IDMD5前四位+卖家ID+app+一级目录+date+二级目录

MD5的前四位作为rowkey的第一部分,可以把数据散列,让服务器负载均衡,避免热点问题。卖家ID是查询必传的这样就缩小了我们scan的范围,能够更快的查询到我们需要的数据。

最后,rowkey的长度也会关乎到我们的性能,由于HBase属于列式数据库,若rowkey长度增加一倍那么整体的存储量会成倍增加。所以rowkey的设计没有固定的模式,在实际的实践中需要我们参考各种因素来实现rowkey的最优化。


 

猜你喜欢




#大数据和云计算机技术社区#博客精选(2017)

猜一猜全球未来5朵云会是谁?

NoSQL 还是 SQL ?这一篇讲清楚

阿里的OceanBase解密

#大数据和云计算技术#: "四有"社区介绍

大数据和云计算技术周报(第27期)

新数仓系列:Hbase周边生态梳理(1)

《大数据架构详解》第2次修订说明

云观察系列:漫谈运营商公有云发展史

云观察系列:百度云的一波三折

云观察系列:阿里云战略观察

超融合方案分析系列(7)思科超融合方案分析

加入技术讨论群




《大数据和云计算技术》社区群人数已经3000+,欢迎大家加下面助手微信,拉大家进群,自由交流。

喜欢钉钉扫码下面的群:

喜欢QQ群的,可以扫描下面二维码:

欢迎大家通过二维码打赏支持技术社区(英雄请留名,社区感谢您,打赏次数超过100+):







  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值