- 基础
Hbase是一个开源的、分布式的、版本化的、非关系型数据库、实时随机读写、NoSQL数据库、列存储、可存储海量数据
实际上是加修改 新增一行 时间戳变了 读的时候读最新的时间戳数据
- 优点:
- 海量存储,适合存储PB级的海量数据,在PB级的数据以及采用链家PC存储的情况下,能在几十到百毫秒内返回数据,这与hbase的记忆扩展性息息相关,正是因为hbase的良好扩展性,才为海量数据的存储提供了遍历
- 列式存储 hbase是根据列族来存储数据的,列族下面可以有非常多的列,列族在建表的时候就必须指定,而不用指定列
- 极易扩展 hbase的扩展性体现在两方面 一个是基于上层处理能力的扩展,一个是基于存储能力的扩展
- 高并发
- 稀疏 稀疏主要是针对HBase列的灵活性,在列族中,可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间。
- 基础
是一个高可靠、高性能、面向列、可伸缩的分布式存储系统,利用hbase技术可在廉价PC server上搭建起大规模结构化存储集群
Hbase利用hdfs作为文件存储系统,利用mapreduce来处理hbase中的海量数据,利用zookeeper作为协调工具
Hbase三要素:
- 主键 row key (主键用来检索记录的主键,访问hbase table中的行,只有三种方式:)
- 通过单个row key的访问
- 通过row key的range
- 全表扫描(scan)
- 列族 column family
列族在创建表的时候声明,一个列族可以包含多个列,列中的数据都是以二进制形式存在,没有数据类型
- 时间戳 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中的历史数据