一、简介
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的基础架构
  • hbase 数据存储 hbase数据存储的实际载体_zookeeper

  • 注意:
    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上。