Hbase原理与实践-1

Hbase数据模型

从逻辑视图来看,Hbase的数据是用表形式进行组织的,而且和关系型数据库中的表一样,由列和行构成,从物理视图来看,hbase中的数据是一个Map,由键值(k,v)组成,不过与普通Map不同,Hbase是一个稀疏的、分布式、多维排序的Map.

Hbase的逻辑视图

  • table: 表,一个表包含多行数据
  • row:行,一行数据包含一个唯一标识rowkey、多个column以及对应的值。在Hbase中,一张表中所有row都按照rowkey的字典由小到大排序。
  • column:列,与关系型数据库中列不同,Hbase中的column由column family (列族)以及qualifier(列名) 两部分组成,两者中间使用:相连。列族在创建表时候需要指定,用户不能随意增减。但是列可以变更
  • timestamp: 时间戳,每个cell在写入hbase时候都会默认分配一个时间戳作为该cell的版本,当然,用户也可以在写入的时候自带时间戳。hbase支持多版本特性,即同一个rowkey、column下可以有多个value存在,这些value使用timestamp作为版本号,版本越大表示数据越新。
  • cell 单元格,由五元组(row,column,yimestamp,type,value)组成的结构,其中type表示Put/Delete这样的操作类型,timestamp代表这个cell的版本。这个结构在数据库中实际是以KV结构存储,其中(row,column,timestamp,type)是K,value对应V

物理模型

与大多数数据库系统不同,Hbase中的数据是按照列族存储的,即将数据按照列族分别存储在不同的目录中。

存储方式

行式存储

行式存储系统会将一行数据存储在一起,一行数据写完之后再接着写下一行,最典型的如MySQL这类关系型数据库。获取一行数据比较高效

列式存储

列存储理论上会将一列数据存储在一起,不同列的数据分别集中存储,最典型的如Kudu、Parquet on hdfs等。列式存储对于获取一行的请求不高效,但是对于获取某些列数据请求非常高效。另外因为同一列数据通常都具有相同的数据类型,因此列式存储具有天然的高压缩特性

列族式存储

从概念上来说,列族存储介于行和列之间

HBASE体系架构

  • Hbase客户端:提供了Shell命令行接口,原生Java api编程接口、MapReduce编程接口。等
  • zookeeper 主要协调管理分布式应用程序。在Hbase系统中,zookeeper扮演着非常重要的角色。比如:实现master高可用,管理核心元数据,参与regionServer耽机恢复;实现分布式表锁
  • Master master主要负责hbase的管理工作,处理用户的管理请求,包括建表、修改表、权限操作,切分表,合并数据分片以及compaction等。管理集群中的regionserver,包括regionserver中的region负载均衡。
  • regionserver 主要用来响应用户的IO请求,是Hbase中最核心模块,WAL,BlockCacheRegion等
  • HDFS 底层存储。

Hbase系统特点

优点
  • 容量巨大:Hbase单表可支持千亿行、百万列数据规模,数据容量可以达到TB甚至PB级别。传统的关系型数据规模,单表超过亿行会出现读写性能急剧下降
  • 良好的扩展性:HBase集群可以非常方便的实现集群容量扩展,主要包括数据存储节点扩展以及读写服务节点扩展。通过增加hdfs的datanode节点或者hregionServer节点。
  • 稀疏性:Hbase支持大量稀疏存储,即允许大量列植为空,并不占用任何存储空间。
  • 高性能:适用于oltp场景,数据读写操作性能强劲
  • 多版本:hbase支持多版本
  • 支持过期:Hbase支持ttl过期特性,用户只需要设置过期时间,超过TTL的数据就会被自动清理,不需要用户手动写
  • Hadoop原生支持
缺点
  • Hbase本身不支持很复杂的聚合元算,不适合olap场景
  • hbase本身没有实现二级索引
  • hbase原生不支持全局跨行事务,只支持单行事务模型。

你可能感兴趣的:(大数据,hbase基础)