前言

访问hbase table中的行,只有三种方式:

1 通过单个row key访问

2 通过row key的range

3 全表扫描

可以看出rowkey设计的好与坏直接决定了查询速度,在hbase中快速定位也是依靠布隆过滤器,然而布隆过滤器依靠的就是rowkey,所以设计一个好的row可以省不少事情。

但是下面列出的方式紧紧是提供一种设计原则,最重要的还是要具体问题具体分析,然后设计出比较符合业务内容的rowkey.

rowkey长度原则

rowkey是一个二进制码流,可以是任意字符串,最大长度64kb,实际应用中一般为10-100bytes,以byte[]形式保存,一般设计成定长。议越短越好,不要超过16个字节,设计过长会降低memstore内存的利用率和HFile存贮数据的效率。

这个需要着重说一下,首先一条数据是根据rowkey来当成索引的,如果过长就会快速占据memstore的128M,然后被刷写到磁盘,也就是说相同的空间存贮的内容被rowkey占据了一大部分,减少了主要内容的存贮

rowkey散列原则

建议将rowkey的高位作为散列字段,这样将提高数据均衡分布在每个RegionServer,以实现负载均衡的几率。如果没有散列字段,首字段直接是时间信息。

所有的数据都会集中在一个RegionServer上,这样在数据检索的时候负载会集中在个别的RegionServer上,造成热点问题,会降低查询效率。

rowkey唯一原则

必须在设计上保证其唯一性,rowkey是按照字典顺序排序存储的,

因此,设计rowkey的时候,要充分利用这个排序的特点,可以将经常读取的数据存储到一块,将最近可能会被访问的数据放到一块。

hbase表的热点

1.什么是热点

检索habse的记录首先要通过row key来定位数据行。当大量的client访问hbase集群的一个或少数几个节点,造成少数region server的读/写请求过多、负载过大,而其他region server负载却很小,就造成了“热点”现象。

2.热点的解决办法

2.1预分区

预分区的目的让表的数据可以均衡的分散在集群中,而不是默认只有一个region分布在集群的一个节点上。

2.2加盐

这里所说的加盐不是密码学中的加盐,而是在rowkey的前面增加随机数,具体就是给rowkey分配一个随机前缀以使得它和之前的rowkey的开头不同。

2.3哈希

哈希会使同一行永远用一个前缀加盐。哈希也可以使负载分散到整个集群,但是读却是可以预测的。使用确定的哈希可以让客户端重构完整的rowkey,可以使用get操作准确获取某一个行数据。

2.4反转

反转固定长度或者数字格式的rowkey。这样可以使得rowkey中经常改变的部分(最没有意义的部分)放在前面。这样可以有效的随机rowkey,但是牺牲了rowkey的有序性。

体会

rowkey既想要能够快速检索,就想要内容最好集中到少量的region中,但是一旦集中了,就会产生热点问题,所以,他们是相伴相生。

总结

点击关注不迷路,有啥想和我交流欢迎下方留言。

hbase 预分区_hbase的rowKey设计原则相关推荐

  1. Hadoop生态圈-Hbase的rowKey设计原则

    Hadoop生态圈-Hbase的rowKey设计原则 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 转载于:https://www.cnblogs.com/yinzhengjie/ ...

  2. Hbase rowkey设计原则,热点问题

    rowKey的作用 读写数据时通过 RowKey 找到对应的 Region: MemStore 中的数据按 RowKey 字典顺序排序: HFile 中的数据按 RowKey 字典顺序排序. rowk ...

  3. hbase 预分区设计

    文章目录 hbase 预分区设计 一.手动切割分区 二.自动切割分区 三.预先切割分区 四.三种预分区方式 1.范围预分区 2.16进制预分区 3.按文件中的分区 hbase 预分区设计 hbase ...

  4. hbase的rowkey设计原则及热点问题

    1.1 hbase数据库介绍 1.简介 hbase是基于Google BigTable模型开发的,典型的key/value系统.是建立在hdfs之上,提供高可靠性.高性能.列存储.可伸缩.实时读写no ...

  5. Hbase预分区入门

    什么是Hbase 预分区? 在建表的时候,可以给每个region划分不同的rowkey范围. 之后在插入数据的时候,数据就会依据rowkey的不同进入到不同的region中.当然,每个region在h ...

  6. rowKey设计原则

    rowkey设计原则 a.唯一原则 一定要保证当前的rowkey是所有数据的唯一一行 b.长度原则 在满足唯一原则的基础上,尽可能的减少rowk的容量大小 如果rowkey有特殊的排序需求的时候,要补 ...

  7. 【HBase】热点现象及 RowKey 设计(转)

    原文链接:https://blog.csdn.net/qq_26803795/article/details/105994960?spm=a2c6h.12873639.0.0.62201019lo19 ...

  8. 最通俗易懂的解释hbase热点问题rowkey设计原则region分区及解决方案

    关于热点问题,我简单陈述容易理解: 我们最开始hbase创建表默认是一个region,而我们所谓的热点问题其实就是对某一个region的过量访问造成的 Hbase当发现一个region存储数据量大于阈 ...

  9. Hbase Rowkey设计原则

    Hbase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这三个维度可以对HBase中的数据进行快速定位 ...

最新文章

  1. 小米发力AI场景下的“快应用”,投百亿资源扶持开发者
  2. C语言经典例21-猴子吃桃问题
  3. SQL获取刚插入的记录的自动增长列ID的值
  4. [云炬创业管理笔记]第三章测试5
  5. 【二维差分】Monitor
  6. java webview 对象_Android – 将JSON对象从webview javascript传递给java
  7. 破解寝室安装老毛子路由器校园网电信闪讯锐捷认证
  8. 苹果PD20W快充方案缺货,芯片供应不足,怎么破局?
  9. ESDCAT静电猫项目
  10. 【图像处理】基于灰度矩的亚像素边缘检测方法理论及MATLAB实现
  11. 业务员如何听懂采购要吃回扣的暗语或者动作?
  12. “互联网+政务”是什么?
  13. 二十一世纪大学英语读写教程学习笔记(原文)——7 - I Became Her Target(我成了她的靶子)
  14. python换位加密算法_柱状换位密码
  15. 「纯前端容器」打造无缝平滑的用户体验
  16. 使用 Kali Linux 爆破 WiFi 密码
  17. Spark抽取MySQL分表优化
  18. 生僻字用计算机的歌词,生僻字歌词带拼音版本:生僻字歌词是什么意思?
  19. jquery实现点击按钮变灰不可点击并开始倒计时10秒特效代码
  20. 供应链管理与企业边界—基于超边际的分析框架 (zt)

热门文章

  1. 安卓使用intent切换到同级窗口和子窗口,并从子窗口中获取返回数据
  2. 实现labelme批量json_to_dataset方法
  3. hdu 1176 免费馅饼(nyist 613)
  4. dsu on tree入门
  5. 在DataTable中执行DataTable.Select(条件),
  6. 不依赖jstack的java 线程dump和死锁检查工具
  7. The Windows Phone Emulator wasn't able to create the external network switches 解决方法
  8. Java SE 6生命将在今年11月终结
  9. [转载] python中三角函数_Python中的三角函数
  10. [转载] Python中的set(集合)数据类型