HBase详解

HBase的应用场景
海量数据,实现高效随机访问
高吞吐量
很好的性能伸缩能力
能够同时处理结构化和非结构化的数据
不适合事务性很高的场景

分布式要求高可靠性
Hbase适用于低时延,高吞吐量,精度或前缀的查询,不适用于模糊查询的数据库
HBase: 传统数据库:
分布式存储、面向列、动态扩展列 结构固定,需要大量IO,扩展成本大
普通商用硬件支持,扩容成本低 保证原子性ACID
不保证原子性

HBase强依赖于zookeeper和hdfs一类的文件系统
HBase是key-value的形式存储数据,是以列存储的
key-value有特定格式,会有额外的开销来记录时间戳,类型等关键信息
所以存储的信息所占空间会有额外的膨胀问题
hbase的key以二进制进行排序,所以对所有类型作为key都是支持的

HBase在架构上分为HMaster和HRegionServer两部分
HMaster作用:管理节点,做负载均衡,调整regionServer下的region数量,很闲
而HMaster的会有主备节点,而俩个节点其实是一模一样的,区分的方式是在zookeeper中只有HMaster一个位置,谁先占据,谁就是主,其余都可以去休眠了,直到当前的主HMaster挂掉的时候
RegionServer:工作的节点,负责多个Region,一个表对应这多个Region

分为三个重要流程:
flush
一个client向HBase中写数据时,会有flush操作,但是这样的写入操作不会直接就往硬盘里去写的,这是先往HLog中写,HLog固化到硬盘上,之后就会返回写入成功的消息
当然这是可能会有疑问
1、那为什么持久化HLog中后,还要取flush,经过memstore,再刷到硬盘上呢?
因为数据固化到HLog中时是无序,我们需要将数据在内存中排序然后刷到硬盘上
这样做是为了提高效率,不可能数据来了直接往硬盘里塞,那样太慢了
2、这样在内存中排序,然后刷到硬盘上,可以保证每个HFile中的内容是有序的,但是又做到读数据时的整体有序呢?
当我们读取数据时, 可以像执行归并操作中的merge操作,将一个个有序的集合合并成一个整体有序的集合,这样读出的数据是有序的

compaction

HBase的合并HFile,合并方式分为Minor Compaction(部分合并),Major compaction(全部合并为一个)
合并是针对的一个region下的列族下的HFile
一个表下的不同列族会刷到不同的HFile中,所以列族的定义不要根据喜好就随意的定义了
HBase的列族,建议以列的物理属性来分,例如,一些列需要压缩,一些列需要加密,而另外的列什么都不需要做,那么这就可以分为三个列族,因为列族不同,所存的文件也不同
或者从业务上来分,例如按照这些列是否经常读

split

当一个Region的数据大小过大时,region会自动分裂,当然不是真正的分裂,而是通过创建文件引用的方式,实现快速分裂,一个parent Region分裂为两个子region

HBase的强大查询功能的实现:
1、client向zookeeper请求元数据,获得记录着region对应regionServer的位置和region记录的编号范围,在读取一次之后,这份元数据就会被缓存在client,这样就避免了重复的网络申请,缓存是提高性能很实用的方法
2、当定位到具体的region的时候,一个Region下有数千个HFile,那可怎么办?
HBase会将数据在内存中排序,存储向硬盘,然后索引记录key值范围和偏移量,这样就可以快速定位到某个HFile上
元数据存储在HFile的末尾固定的空间长度内,这段空间不会参与HFile的加密、压缩等操作,因为这样操作会改变元数据的长度,这样再去定位索引的位置就麻烦了
3、HBase支持BloomFilter
在记录写进HFile时,选取记录的特定列取hash值,改变数组中对应位置的值,这样在查找时对应数组,如果对应位置被改变了,那么所要查的记录可能在这个文件里;如果没有被改变,那么肯定不在,这样也会节约大量时间

所以综上所述:HBase的查询会很快

HBase写数据优化:
批量写数据时,它是数据按照所要写入regionServer分类,这样一次发送的数据,向2个RegionServer中写数据时,也只是两次RPC请求,而不是每次写一条记录都要申请一次

Filter过滤,在服务端做这种事,避免网络传输数据过大
但有可能由于超时原因,使得没有数据返回

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值