Hbase RowKey设计以及HBase数据倾斜问题

本文介绍了HBase中RowKey的设计原则,包括唯一性、排序、散列和长度原则,并详细讨论了数据倾斜问题,提出了预分区和RowKey设计实战策略,如反转、加盐和Hash散列来解决热点问题。此外,还分享了实际应用场景中的RowKey设计方案。
摘要由CSDN通过智能技术生成

  作为Nosql数据库的一员,HBase查询只能通过其rowkey来查询(rowkey用来表示唯一一行记录),HBase中的数据是按照rowkey的ASCII字典顺序进行全局排序的。HBase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这个三个维度可以对HBase中的数据进行快速定位。
  HBase中rowkey可以唯一标识一行记录,在HBase查询的时候,有以下几种方式:

  • 通过get方式(org.apache.hadoop.hbase.client.Get),指定rowkey获取唯一一条记录
  • 通过scan方式(org.apache.hadoop.hbase.client.Scan),设置startRow和stopRow参数进行范围匹配
  • 全表扫描,即直接扫描整张表中所有行记录

get:
  按照RowKey获取唯一一条记录。get的方法处理分两种:设置了ClosestRowBefore和没有设置ClosestRowBefore的RowLock。主要用来保证行的事务性,即每个get是以一个row来标记的。

scan:
  按照指定的条件获取一批记录。实现条件查询功能使用的就是scan方式,scan在使用时有以下几点值得注意:

  1. scan可以通过setCach与setBatch方法提高速度(以空间换时间)
  2. scan可以通过setStartRow与setEndRow来限定范围。范围越小,性能越高。通过巧妙的RowKey设计使我们批量获取记录集合中的元素挨在一起(应该在同一个Region下),可以在遍历结果时获得很好的性能
  3. scan可以通过setFilter方法添加过滤器,这也是分页、多条件查询的基础

补充:Hbase列族怎么创建比较好
  一个列族在数据底层是一个文件,所以将经常一起查询的列放到一个列族中,列族尽量少,减少文件的寻址时间。

Rowkey设计原则

Rowkey设计应遵循以下原则:
【1】Rowkey的唯一原则
  由于在HBase中数据存储是Key-Value形式,若HBase中同一表插入相同Rowkey,则原先的数据会被覆盖掉(如果表的version设置为1的话),所

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值