hbase小结

来源:互联网 时间:1970-01-01



hbase原理

HBase是一个构建在HDFS上的分布式列存储系统。
在架构上hbase由hmaster和hregionserver组成,他们之间依靠zookeeper进行通信。
在数据模型上由行健、列族、列族限定符、时间戳、值组成。
在物理模型上region存储一个表的一定行健范围内的数据,region由多个hstore组成,hstore存储某个列族的memostore和storefile,数据写入时首先会写入memostore及wal,memostore是一个lsm树结构,能够把大量的随机写变为批量的顺序写,在树中会按rowkey进行排序,当memostore达到一定阈值时会flush到storefile,storefile达到一定阈值时会进行合并和分裂,合并和分裂都是以region为单位进行的。


hbase协处理器
包括observer和endpoint,observer是针对增删改查、创建表、删除表时触发一个动作;endpoint作用于regionserver,类似于MR中的map,而客户端类似于reduce进行汇总操作。

hbase过滤器
在服务器端执行过滤操作,将过滤后的数据返回,减少网络流量。

hbase布隆过滤器
使用Bloom Filter可以减少为了判断key是否存在而去做Scan操作的次数。
假设x、y、z三个key存在于table中,W不存在,
step1)分别对x、y、z运算hash函数取得bit mask,写到Bloom Filter结构中
step2)对W运算hash函数,从Bloom Filter查找bit mask
   如果不存在:三个Bit位至少有一个为0,W肯定不存在该(Bloom Filter不会漏判)
   如果存在:三个Bit位全部全部等于1,路由到负责W的Region执行scan,确认是否真的存在(Bloom Filter有极小的概率误判) 

hbase优化
memostore大小(128M),region大小(默认256M),datablock大小(128k),hstore合并分裂的阈值,大合并时间,或者手动split,compact。


hbaseRowkey的设计
Rowkey长度原则,越短越好,不要超过16个字节
Rowkey散列原则,避免热点现象,将regionserver的负载均衡
预分区,按照rowkey对某个表预先分为多个region,要事先保证写入数据时行健是散列的,可以对行健取模、做反转等等。
Rowkey唯一原则


列簇的设计
列簇尽量少,最好不超过3个。因为每个列簇是存在一个独立的HFile里的,flush和compaction操作都是针对一个Region进行的,当一个列簇的数据很多需要flush的时候,其它列簇即使数据很少也需要flush,这样就产生的大量不必要的io操作。(HRegion由一个或者多个Store组成,每个store保存一个columns family。)
在多列簇的情况下,注意各列簇数据的数量级要一致。如果两个列簇的数量级相差太大,会使数量级少的列簇的数据扫描效率低下。
将经常查询和不经常查询的数据放到不同的列簇。
因为列簇和列的名字会存在HBase的每个Cell中,所以他们的名字应该尽可能的短。



相关阅读:
Top