1. 基础

Hbase是一个开源的、分布式的、版本化的、非关系型数据库、实时随机读写、NoSQL数据库、列存储、可存储海量数据

实际上是加修改 新增一行 时间戳变了  读的时候读最新的时间戳数据

  1. 优点:
  1. 海量存储,适合存储PB级的海量数据,在PB级的数据以及采用链家PC存储的情况下,能在几十到百毫秒内返回数据,这与hbase的记忆扩展性息息相关,正是因为hbase的良好扩展性,才为海量数据的存储提供了遍历
  2. 列式存储 hbase是根据列族来存储数据的,列族下面可以有非常多的列,列族在建表的时候就必须指定,而不用指定列
  3. 极易扩展  hbase的扩展性体现在两方面  一个是基于上层处理能力的扩展,一个是基于存储能力的扩展
  4. 高并发
  5. 稀疏  稀疏主要是针对HBase列的灵活性,在列族中,可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间。
  1. 基础

是一个高可靠、高性能、面向列、可伸缩的分布式存储系统,利用hbase技术可在廉价PC server上搭建起大规模结构化存储集群

Hbase利用hdfs作为文件存储系统,利用mapreduce来处理hbase中的海量数据,利用zookeeper作为协调工具

Hbase三要素:

  1. 主键 row key (主键用来检索记录的主键,访问hbase table中的行,只有三种方式:)
  • 通过单个row key的访问
  • 通过row key的range
  • 全表扫描(scan)
  1. 列族 column family

列族在创建表的时候声明,一个列族可以包含多个列,列中的数据都是以二进制形式存在,没有数据类型

  1. 时间戳  timestamp

Hbase中通过Row和column Family 确定的为一个存储单元称为cell,每个cell都保存这同一份数据的多个版本,版本通过时间戳来索引

Hbase读操作

首先从zk中找到meta表的region信息,然后meta表中的数据,meta表中存储了用户的region信息

根据要查询的namespace、表名和rowkey信息,找到对应的真正存储要查询的数据的region信息

找到这个region对应的regionServer,然后发送请求

查找对应的region

先从metastore查找数据,如果没有,再从BlockCache读取。

HBase上的RegionServer的内存分为两个部分

一部分作为Memstore,主要用来写

另一部分作为BlockCache,主要用来读数据

如果BlockCache中也没有找到,再到StoreFile上进行读取

从storeFile中读取到数据之后,不是直接把结果数据返回给客户端, 而是把数据先写⼊入到BlockCache中,目的是为了加快后续的查询;然后在返回结果给客户端。

Hbase写操作

首先从zk找到meta表的region位置,然后读取meta表中的数据,meta表中存储了用户表的region信息

根据要查询的namespace、表名和rowkey信息,找到对应的真正存储要查询的数据的region信息

找到这个region对应的regionServer,然后发送请求

把数据写到HLog(write ahead log。WAL:预写入日志)和memstore各一份(写到Region里列族对应的Store的内存)

Memstore 达到阈值后把数据刷到磁盘,生产storeFile

删除HLog中的历史数据