HBase的基本原理和体系结构(一)

文章目录

  • 1. 前言
  • 2. NoSQL
    • 2.1 什么是NoSQL
    • 2.2 NoSQL数据库的分类
      • 2.2.1 键值(key-value)存储数据库
      • 2.2.2 列存储数据库
      • 2.2.3 文档型数据库
      • 2.2.4 图形(Graph)数据库
    • 2.3 NoSQL数据库的应用
    • 2.4 关系型数据库与非关系型数据库的区别
  • 3. HBase基础
    • 3.1 HBase表结构
      • 3.1.1 Row Key
      • 3.1.2 列族 (Column Family)
      • 3.1.3 时间戳 (Timestamp)
      • 3.1.4 单元格 (cell)
    • 3.2 HBase的体系结构
      • 3.2.1 client
      • 3.2.2 Zookeeper
      • 3.2.3 HMaster
      • 3.2.4 HRegion Server
      • 3.2.5 HRegion
      • 3.2.6 HLog

1. 前言

HBase属于列式非关系型数据库(NoSQL),最早起源于Google发布的Bigtable。HBase是一个高可用、高性能、面向列·、可伸缩的分布式存储系统,利用HBase技术可以在廉价的PC服务器上搭建一个大规模结构化的存储集群。HBase是一个可以随机访问的存储和检索数据平台,弥补了HDFS或Hive不能随机访问数据的缺陷,适合实时性要求不高的业务场景。

2. NoSQL

2.1 什么是NoSQL

NoSQL = Not Only SQL,不仅仅是SQL。NoSQL是一个通用术语,即非关系型数据库,它不是以SQL作为其主要的访问语言。
一个关系型数据库虽然可以很好地被扩展,但仅限于某个点,也就是一个数据库服务器的大小,并且为了实现最佳性能,需要专用的硬件和存储设备。随着互联网的发展,关系型数据库在应付超大规模和高并发的系统上已经显得“力不从心”,非关系型数据库就这样产生了。

2.2 NoSQL数据库的分类

2.2.1 键值(key-value)存储数据库

键值存储数据库中的数据是以键值对格式进行存储的,类似于Java中的Map,其数据库中的表有一个特定的key键和键所指向的value

2.2.2 列存储数据库

列存储数据库与传统的关系型数据库不同,关系型数据库按照行进行存储,而列数据库是每一列单独存放,仅仅查询所需要的列,查询速度大幅提高。

2.2.3 文档型数据库

文档型数据库和键值存储类似。该类型的数据模型是将内容按照某特定的格式进行存储,如JSON格式和MongoDB就属于文档型数据库。

2.2.4 图形(Graph)数据库

图形数据库与关系型数据库和列式数据库不同,他是基于灵活的图形模型,并且可以扩展到多个服务器上。另外,由于NoSQL数据库并没有标准的查询语句,所以在进行数据库查询时需要制定数据模型,如Neo4j。

2.3 NoSQL数据库的应用

  1. 对数据库性能要求高,需要节省开发成本和维护成本。
  2. 数据量大、数据模型简单。
  3. 不需要高度的数据一致性。
  4. 对于给定key,比较容易映射复杂值的环境,数据之间关系性不强。

2.4 关系型数据库与非关系型数据库的区别

  1. 成本

NoSQL数据库简单易部署,基本都是开源软件,不需要像使用Oracle那样花费大笔资金购买后使用,价格更便宜。

  1. 查询速度

NoSQL数据库将数据存储在缓存中,关系型数据库将数据存储在硬盘中,自然查询速度远不及NoSQL数据库。

  1. 存储数据格式

NoSQL的存储格式是key/value的形式、文档形式、图片形式等,所以可以存储基础类型及对象或集合等各种格式,而数据库则只支持基础类型。

  1. 扩展性

关系型数据库有类似于JOIN这样的多表查询机制的限制导致扩展很艰难。

3. HBase基础

3.1 HBase表结构

HBase的表结构如下图所示:
HBase的基本原理和体系结构(一)_第1张图片
下面逐个介绍一下各个组件:

3.1.1 Row Key

与NoSQL数据库一样,Row Key是用来检索记录的主键,访问HBase Table中的行只有一下三种方式:

通过单个Row Key访问
通过Row Key的Range
全表扫描

Row Key行键可以是任意的字符串,在HBase内部,Row Key保存为字节数组。存储时,数据按照Row Key的字典序排序存储,设计Key时,要充分考虑到这一特性,将经常读取的行存储在一起(位置相关性)。

3.1.2 列族 (Column Family)

HBase表中的每个列,都归属于某个列族,列族是表的chema的一部分(而列不是),必须在使用表之前定义,列名都以列族作为前缀。

访问控制、磁盘和内存的使用统计都是在列族层面进行的,实际应用中,列族上的控制权限能帮助管理不同类型的应用:允许一些应用可以添加新的基本类型、读取基本数据并创建继承的列族,但一些应用则只允许浏览数据。

3.1.3 时间戳 (Timestamp)

HBase中通过row和columns确定的存储单元成为cell。每个cell都保存着同一份数据的多个版本,版本通过实践戳来索引。实践戳的类型是64位整型。实践戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。实践戳也可以由客户显示赋值。如果应用程序要避免数据版本冲突,就必须生成具有唯一性的时间戳。每个cell中,不同版本的数据按照时间倒序排序,最新的数据排在最前面。

为了避免数据存在过多版本造成的管理(存储和索引)的负担,HBase提供了两种数据版本回收方式:一是保存数据的最后n个版本,而是保存最近一段时间内的版本,用户可以针对每个列族进行设置。

3.1.4 单元格 (cell)

单元格cell内容是没有解析的字节数组,由行和列的坐标交叉决定,同时单元格是有版本的。单元格中的数据是没有类型的,都是由二进制字节码形式存储。

3.2 HBase的体系结构

HBase的体系结构图如下所示:
HBase的基本原理和体系结构(一)_第2张图片
下面介绍各个组件:

3.2.1 client

包含访问Hbase的接口,client维护着一些cache来加快对HBase的访问,比如Region的位置信息。

3.2.2 Zookeeper

  1. 保证任何时候,集群中只有一个HMaster
  2. 实时监控HRegion Server的上线和下线信息,并实时通知给HMaster。
  3. 存储HBase的Table表数据和存储所有Region的寻址入口。

3.2.3 HMaster

理论上HMaster可以启动多个,但是Zookeeper有MasterElection机制保证只有一个HMaster在运行,来负责Table和Region的管理工作。

  1. 管理HRegionServer的负载均衡,调整Region分布。
  2. Region Split后,负责新的Region的分布。
  3. 在HRegionServer停机后,负责失效HRegionServer上Region的迁移工作。

3.2.4 HRegion Server

HBase中的所有数据都是保存在HDFS中,用户通过一系列的HRegionServer获取这些数据。一个节点上只有一个HRegionServer和多个HRegion,每一个区段的HRegion只会被一个HRegionServer维护,HRegionServer主要负责响应用户I/O请求,向HDFS文件系统读写数据。

3.2.5 HRegion

HRegion是用来存储实际数据的,当表的大小超过预设时,HBase会自动生成多个Region来存储数据。

3.2.6 HLog

每个HRegionServer中都有一个HLog对象,实现用户操作记录。在用户操作将数据写入MemStore的时候,同时会写一份数据到HLog文件中,HLog文件会定期滚动刷新,并删除旧的文件。

HLog的作用:当HRegionServer意外终止,HMaster会通过遗留的HLog文件,把不同的HRegion的HLog数据进行拆分,分别放到相应的HRegion的目录下,然后再将失效的HRegion重新分配到其他的HRegionServer中,完成数据恢复。

你可能感兴趣的:(#,HBase,NoSQL,大数据)