1、compression

  默认值是 NONE 即不使用压缩, 这个参数意思是该列族是否采用压缩,采用什么压缩算 法

  方法: create 'table',{NAME=>'info',COMPRESSION=>'SNAPPY'}

建议采用 SNAPPY 压缩算法 , HBase 中,在 Snappy 发布之前( Google 2011 年对外发布 Snappy),采用的 LZO 算法,目标是达到尽可能快的压缩和解压速度,同时减少对 CPU 的消耗;

HBase修改压缩格式,需要一个列族一个列族的修改  alter 'test', NAME => 'f', COMPRESSION => 'snappy'

而且这个地方要小心,别将列族名字写错,或者大小写错误。因为这个地方任何错误,都会创建一个新的列族,且压缩格式为snappy(修改之前需要先disable,修改完之后需要enable,然后 major_compact 'test')

 

2、TTL (time to live)

设置方法和versions类似

 

3、disable_all enable_all drop_all:支持正则表达式,并列出当前匹配的表,之后给出确认提示。

 

4、Hbase 预分区

  HBase表在刚刚被创建时,只有1个分区(region),当一个region过大(达到hbase.hregion.max.filesize属性中定义的阈值,默认10GB)时,表将会进行split,分裂为2个分区。表在进行split的时候,会耗费大量的资源,频繁的分区对HBase的性能有巨大的影响。HBase提供了预分区功能,即用户可以在创建表的时候对表按照一定的规则分区。分区是针对表级,不是列族级,因为region是根据rowkey来划分的。

  目的:减少由于region split带来的资源消耗。从而提高HBase的性能。

方案1:Hbase shell 创建,16010端口可以查看具体region

  

hbase 表结构 修改 hbase 修改表属性_正则表达式

hbase 表结构 修改 hbase 修改表属性_数据_02

方案2:Hbase shell ,通过文件来创建

  

hbase 表结构 修改 hbase 修改表属性_用户信息_03

 

hbase 表结构 修改 hbase 修改表属性_正则表达式_04

 

5、表的设计

  列簇设计:

  原则:在合理范围内能尽量少的减少列簇就尽量减少列簇,因为列簇是共享region的,每个列簇数据相差太大导致查询效率低下

  最优:将所有相关性很强的 key-value 都放在同一个列簇下,这样既能做到查询效率 最高,也能保持尽可能少的访问不同的磁盘文件。以用户信息为例,可以将必须的基本信息存放在一个列族,而一些附加的额外信息可以放在 另一列族 

  rowkey设计:

    长度原则:100字节以内,8的倍数最好,可能的情况下越短越好。因为HFile是按照keyvalue存储的,过长的rowkey会影响存储效率;其次,过长的rowkey在memstore中较大,影响缓冲效果,降低检索效率。最后,操作系统大多为64位,8的倍数,充分利用操作系统的最佳性能。

    散列原则:高位散列,低位时间字段。避免热点问题

    唯一原则:分利用这个排序的特点,将经常读取的数据存储到一块,将最近可能会被访问 的数据放到一块。

 

6、数据热点问题

  措施一:加盐

    随机前缀,高位散列,讲数据随机分散到region上

  措施二:哈希

    哈希前缀,负债均衡,并且可以利用哈希重构rowkey,使用get获取准确数据

  措施三:反转

    反转固定长度或者数字格式的rowkey,牺牲了有序性,避免类似手机号固定开头的热点问题

  措施四:时间戳反转