HBase简单介绍
HBase是Hadoop的一个子项目,用JAVA语言实现,是建立在HDFS的基础上的非关系型分布式数据库,目标是通过水平扩展的方式处理非常庞大的表。值得注意的是,HBase并非结构化数据库,而是介于非关系型数据库(nosql)与关系型数据库(RDBMS)之间,仅能存储非结构化数据和半结构化数据。
为什么要使用HBase:
- Hadoop可离线批量处理大数据问题,但由于MapReduce框架的延迟较高,所以难以处理实时数据
- HDFS面向批量访问而非随机访问
- 传统数据库无法在数据激增时妥善处理集群扩展性以及性能问题
- 传统数据库在数据结构变化时必须停机维护
HBase的特征:
- 可存储大量数据:HBase可存储PB级数据
- 面向列:HBase中的表由列族组成,以列为单位存储
- 高并发性:HBase集群架构可由廉价PC构成,虽然每台PC的IO延迟不小,但在并发状态下,总体IO延迟并不高
- 稀疏:表中数据以抽象的形式存储在表中,无确切结构,只需以类似索引的形式记录数据的位置,数据为空的地方不占内存
HBase与RDBMS的区别:
数据类型:关系型数据库中数据以表的形式存在,采用关系模型,数据类型以及存储方式多样化,且操作复杂;
HBase以region形式存在,每个region中包含多个列族,将数据存储为未经解释的字符串,没有复杂的表间关系,
只有简单的添加查询等,不支持join操作
存储模式:HBase基于列存储,每个列族由几个文件保存,不同列族分开保存
数据索引:RDBMS针对不同列构建多个索引,HBase只有一个索引----行键,所有访问都通过行键进行访问或扫描
HBase架构:
HMaster:
监控RegionServer
为RegionServer分配Region
处理负载均衡
通过Zookeeper向客户端报告自己的位置
RegionServer:
实际存储HBase的数据
处理HMaster为其分配的Region
维护内部的HLog
处理对内部Region的IO请求
切分过大的Region
Zookeeper:
监听功能,保证集群中只有一个master
存储region的寻址入口
实时监控Region Server的状态并通知master
底层原理:
HLog中记录数据的所有变更,以便在数据丢失时恢复数据;
每个HRegion由多个列族组成,是负载均衡的最小单位,同一个HRegion不可能被多个Region Server同时拥有;
memstore与storefile:memstore相当于内存,storefile相当于磁盘,数据在menstore中一处时,则形成一个单独的storefile,storefile大于某个值时region被分割,并由master重新分配以达到负载均衡
HBase对数据的读写操作:
读:
- 客户端访问zookeeper得到meta表的位置IP
- 得到响应后客户端访问该region server并找到meta表
- 通过meta表中的元数据信息找到对应的region server并发送读请求
- 目标server将结果返回给客户端
写:
- ,户端访问zookeeper得到meta表的位置IP
- 客户端通过IP访问Region Server,找到meta表并访问其中的元数据信息
- 客户端找到对应Region Server发送写请求
- 得到响应后,湘江数据写入HLog中防止丢失,再写入memstore,两者都写入成功则操作成功