hbase优点与数据检索流程,hbase优点检索
hbase优点
hbase是一个列式存储的非关系型数据库,依赖于zookeeper。数据存储于hdfs上,主节点是HMaster,从节点是HRegionServer.
hbase与关系型数据库相比较优点如下:
1. hbase数据存储于hdfs上,可扩展性强。数据条目数可以存储上一条。
2. 通过rowkey检索数据,速度可以准实时,达到秒级别。
3. 写数据非常快,只要写在Region的memstore内存中即可,不需要重复IO消耗。
4. 每份数据都有多份备份,保证数据安全性。
5. 从成本上来说关系型数据库要用到商用小型机,价格要几百万非常昂贵。但是hdfs只需要普通的商用server,只要几万一台。
hbase数据模型
region介绍
每个表刚开始只有一个region,region的strartRowKey和endRowKey都是空的。当region的大小超过一定的阀值后,就会按照key的中间值分裂成两个region,老的region下线。比如中间值是111000,则新的2个region如下:
null
region1
111000
region2
null
rowkey按照大小排序,新的rowkey会按照大小插入对应的region
数据检索的三种方式
1)get rowkey
2)scan range --> 最多的
3)scan
hbase数据检索流程
hbase架构图
客户端对数据的读和写首先连接zookeeper,在zookeeper中找到meta-region-server节点,meta表被哪个RegionServer管理。
meta表只有一个region,客户端通过表+rowkey在meta表中找这个表的rowkey被哪个RegionServer管理。meta表保存了对应的主机端口,找到后执行相应的操作。
list_namespace_tables 'hbase'查看hbase命名空间下的表
scan 'hbase:meta'查看meta表信息
hbase数据存储
一张表有1个或多个region,region有几个列簇就有几个store。每个store中有一个memstore和0个或多个storefile。
storefile是存在hdfs上的二进制文件,读数据先到memory中读,没有在去storefile中读
在写数据的时候先往HLog写一份,在往memstore中写一份。当memory达到一定大小后,flush到storefile里面去。
注意:
优化:
老版本是一个regionserver一个HLOG,而新版本可以设置一个region一个HLog。
老版本对数据恢复需要分割日志,而新版本可以直接对region的日志做数据还原。但是需要消耗更多的IO,因为要同时打开多个HLog。
数据检索总结
client写入-》存入MemStore,一直到MenStore满-》Flush成一个StoreFile,直至增长到一定阀值-》触发合并操作-》多个storeFile合并后,逐步形成越来越大的storefile-》单个storeFile大小超过一定阀值后,触发split操作,把当前region 分成2个region,region下线。新split出的2个孩子region会被HMaster分配 到相应的HRegionServer上,使得原先的region的压力分流道2个region上
注意:
hbase只是增加数据,所有的更新和删除操作,都是在文件合并阶段做的。所以用户写操作只需要进入内存即可立即返回,从而保证I/0高性能
hbase架构
client端
- 整个HBase集群访问的入口
- 使用HBase采用Rpc机制与HMaster与HMaster和HRegionServer进行通信
- 与HMaster进行通信进行管理类操作
- 与HRegionServer进行数据读写类操作
- 包含访问HBase的接口,并维护cache来加快对HBase的访问
HMaster
Client访问hbase上数据的过程并不需要master参与(寻址访问Zookeeper和HRegion Server)数据读写访问HRegion Server,HMaster仅仅维护table和Region的元数据信息,负载很低
HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master在运行主要负责Table和Region的管理工作 管理用户对table的增删查改操作
在HBase的conf目录下创建backup-masters文件,在里面添加其他主机名称。
保存后执行hbase-deamons.sh start master-backup管理HRegionServer的负载均衡,调整Region分布 Region Split后,负责新Region的分布
- 在HRegionServer停机后,负责失效HRegionServer上Region迁移工作
HRegionServer
- 维护HRegion,处理对这些HRegion的IO请求,向HDFS文件系统中读写数据;
- 负责切分在运行过程中变得过大的HRegion
zookeeper
- 保证任何时候,集群只有一个HMaster
- 存储所有HRegion的寻址入口
- 实时监控HRegionServer的上线和下线功能,并实时通知给HMaster
- 存储HBase的schema和table元数据
- zookeeper Quorum存储-ROOT-(新版本是meta表)地址、HMaster地址
hbase管理zookeeper实力,但是在生产环境中要禁用
注意:hbase-env.xml中,找到
export HBase_managers_zk设置为false