一、简介
1、HBASE是建立在hdfs上的,是bigtable的开源java版本,提供了高可靠性、高性能、列存储、可伸缩、实时读写nosql的数据库系统。以列的方式进行数据的存储和管理,只支持比较简单的(单行)事务
2、HBASE来源于Google的思想
gfs MapReduce bigtable(HBASE)
建立在hdfs上HBASE和hdfs具有紧耦合关系
3、HBASE是一个实时读写的数据库
对于hive比较适合离线的处理
对于HBASE对于大量的数据可以实时读取,并且HBASE支持的数据类型为byte[]
二、作用
主要用来存储结构化和半结构化的松散数据
三、特点
1、大:一个表可以有上十亿行,上百万列,是海量数据的存储
2、面向列:面向列(族)的存储和权限控制,列(族)独立检索。
3、稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
4、适合高并发
四、hadoop与HBASE的关系
对于HDFS:
- 分布式文件存储系统
- hdfs不可以随机读取(无索引)
- 优化一次写入,多次读取的方式
- 使用文件系统和处理框架
- 数据模型不灵活
对于HBASE: - 面向列的数据存储,存储在hdfs上
- 适合多次的频繁写入和读取
- 可以随机读取某一条数据(有索引)
- 支持MapReduce,依赖hdfs
- 提供灵活的数据模型
五、关系型数据库HBASE的对比
对于关系型数据库:(mysql,Oracle,db2,sqlserver) - 以表的形式存在
- 使用Commit log存储日志
- 支持sql 面向列的查询
- 适合存储结构化数据
- 支持事务
- 支持分区
对于HBASE: - 以region(区域)的形式存在,一张表在逻辑上划分为一个region或者是多个region进行管理
- 适合结构化和半结构化的数据
- 支持简单的事务
- 面向列的存储
- 使用行键
- 支持分片
- 和zookeeper是紧耦合关系
- api或者MapReduce进行数据访问
六、HBASE的基础架构 - 注意:
1、 一个表可以有多个列族,一个列族可以有多个列名,一个列族下的列位于一个HFILE中,易于缓存数据,在HBase中数据按主键排序,同时表按主键划分为多个Region。
2、HBASE需要运行在HDFS之上,以HDFS作为其基础存储设施,在HBASE的集群中主要有MASTER(主节点)和regionserver(从节点)组成,以zookeeper
3、HBASE允许存在多个master节点,但是需要zookeeper的帮助,但是当多个master 节点共存时,只有一个master是提供服务的,其他的master都处于待命的状态。
4、对于一个regionserver包括了多个region,regionserver的作用只是管理表格,实现读写操作,Client直接连接RegionServer,并通信获取HBase中的数据。表的数据将存放在多个Region之间,并且在每个Region中会关联多个存储的单元(Store)。
5、zookeeper保证了至少有一个HBASE Master是处于运行状态的,几乎是所有分布式大数据相关的开源架构。
6、region按大小分割,负责存储,当数据增加到一定限度时,region会分割成俩个新的region,每个region包含着多个store对象,每一个store包含着多个storeFe,每个storeFile又包含了一个或多个HFILE。
七、写操作流程 - client通过zookeeper的调度,向regionserver发出数据请求,在region中写数据
- 数据写入region中的memstore,等到memstore达到一定限度时,其中的数据会被FLUSH成storeFILE,但是随着storeFILE的文件逐渐增多,会触发compact合并为一个storeFile,同时进行版本合并与数据删除
- 当storeFile达到一定值后,触发split操作,会把当前的region分割成俩个新的region,且这俩个region会被Hmaster分配到相应的regionserver上。