HBase的RowKey与列族设计原则
Roekey设计原则:
1)Rowkey的长度原则:是⼀个⼆进制码流,Rowkey 的长度被很多开发者建议说设计在10~100 个字节,不过建议是越短越好,不要超过16 个字节。
2)Rowkey散列原则:如果Rowkey 是按时间戳的⽅式递增,不要将时间放在⼆进制码的前⾯,建议将Rowkey的⾼位作为散列字段,由程序循环⽣成,低位放时间字段,这样将提⾼数据均衡分布在每个Regionserver 实现负载均衡的⼏率。如果没有散列字段,⾸字段直接是时间信息将产⽣所有新数据都在⼀个 RegionServer 上堆积的热点现象,这样在做数据检索的时候负载将会集中在个别RegionServer,降低查询效率。
3)Rowkey唯⼀原则:必须在设计上保证其唯⼀性。
列族设计原则:
(1)⼀般不建议设计多个列族。具体原因如下
假如HBase表的表设置两个列族,若已⼀个列族1000万⾏,另⼀个列族100⾏。当⼀个要求region分裂时
候,会导致100⾏的列会同样分布到多个region中。这样就出现基数问题,会导致扫描列族A的性能低下。某个列族在flush的时候,它邻近的列族也会因关联效应出发flush,最终导致系统产⽣更多的I/O。
HBase本⾝的设计⽬标是⽀持稀疏表,⽽稀疏表通常会有很多列,但是每⼀⾏有值的列⼜⽐较少。在HBase中Column Family的数量通常很⼩,同时HBase建议把经常⼀起访问的⽐较类似的列放在同⼀个Column Family中,这样就可以在访问少数⼏个列时,只读取尽量少的数据。
在设计Hbase schema的时候,要尽量只有⼀个column family,⾄于为什么主要从flush和compaction说起,它们触发的基本单位都是Region级别,所以当⼀个column family有⼤量的数据的时候会触发整个region⾥⾯的其他column family的memstore(其实这些memstore可能仅有少量的数据,还不需要flush的)也发⽣flush动作;另外compaction触发的条件是当store file的个数(不是总的store file的⼤⼩)达到⼀定数量的时候会发⽣,⽽flush产⽣的⼤量store file通常会导致compaction,flush/compaction会发⽣很多IO相关的负载,这对Hbase的整体性能有很⼤影响,所以选择合适的column family个数很重要。
(2)数据块缓存配置
如果经常顺序访问或者很少访问,可以关闭列族的缓存,让BLOCKCACHE 参数设置false,列族缓存默认打开。
>create 'mytable',{NAME=>'colfam1',BLOCKCACHE=>'false'}
(3)激进缓存配置
可以选择⼀个列族赋予更⾼的缓存,该参数IN_MEMORY 设置true。列族默认的关闭的。如果你预期⼀个列族⽐另⼀个列族的随机读更多,这个特性迟早⽤的上。
>create 'mytable',{NAME=>'colfam1',IN_MEMORY=>'true'}
(4)布隆过滤器(BLOOMFILTER)设置
减少硬盘读取数据带来的开销。对存储的数据块做反向测试,占⽤额外的空间。
布隆过滤器随着它们索引的对象数据的增长⽽增长,所以⾏级布隆过滤器⽐列限定符级布隆过滤器占⽤空间要少。当空间不是问题时,它们可以帮助你“榨⼲”系统的性能潜⼒。
>create 'mytable',{NAME=>'colfam1',BLOOMFILTER=>'ROWCOL'}
BLOOMFILTER默认参数为NONE。⼀个⾏级布隆过滤器⽤ROW启动,列限定级布隆过滤器⽤ROWCOL启动。⾏级布隆过滤器在数据快⾥检查特定⾏键是否存在,列限定符级布隆过滤器检查⾏与列限定符组合是否不存在。ROWCOL布隆过滤器的开销⾼于ROW布隆过滤器。(5)⽣产时间配置
超过这个时间设置的就会在下⼀次⼤合并中被删除。TTL =>"18000"。你可以禁⽤TTL,或者通过设置其值为
INT.MAX_VALUE(2147483647)让它永远启⽤(这是默认值)。
>create 'mytable',{NAME=>'colfam1',TTL=>'1800'}
(6)列族压缩
压缩可以节省空间,读写数据会增加CPU的使⽤率 LZO,SNAPPY,GZIP(不常⽤)。
>create 'mytable',{NAME=>'colfam1',COMPRESSION=>'SNAPPY'}
注意,数据只在硬盘上是压缩的,在内存(MemStore或BlockCache)或通过⽹络传输是是没有压缩的。
(7)单元时间版本
默认为3个版本,来保存历史数据。如果只需要哟个版本,推荐设置表时只维护⼀个版本。>create 'mytable',{NAME=>'colfam1',VERSION=>1,TTL=>'1800'}
hbase的特性有哪些
也可以指定列族存储的最少时间版本数:
>create 'mytable',{NAME=>'colfam1',VERSION=>5,MIN_VERSIONS=>'1'}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。