分布式数据库Hbase

HBase 来源

Hbase是BigTable的开源实现

BigTable:

分布式存储系统,最初是为了解决在大量数据下互联网的搜索问题
特点:
(1)架构在GFS上,使用GFS作为底层数据存储;
(2)利用谷歌的MapReduce来处理海量数据;
(3)利用Chubby提供协同服务管理;
(4)可以扩展为PB级别的数据和上千台机器;

Hbase简介

  1. 一个分布式数据库,主要存储非结构化和半结构化的松散数据(底层分布式文件系统只存储非结构化数据)。
  2. 目标;存储非常庞大的表,通过水平扩展,利用廉价计算机集群处理数据
  3. 在Hadoop中的位置:
    使用HDFS作为底层存储结构;利用Hadoop MapReduce来处理海量数据;利用Zookeeper作为协同服务
项目 Bigtable HBase
文件存储系统 GFS HDFS
海量数据存储 MapReduce Hadoop MapReduce
协同服务管理 Chubby Zookeeper
  1. 在已有HDFS和关系型数据库的条件下,为什么产生了HDFS:
    (1) Hadoop主要解决大规模数据的离线批量处理问题,但是受限于Hadoop MapReduce框架的延迟数据处理机制,使得其无法实施处理大规模的数据
    (2)HDFS面向批量访问,而非随机访问
    (3)传统的关系型数据库无法应对数据规模剧增是产生的问题
    (4)传统关系数据库在结构数据变化时一般要停机维护,且空列浪费存储空间

  2. 和传统关系数据库区别:

传统数据库 HBase
数据类型 关系模型,具有丰富的数据类型和存储方式 数据模型,将数据存储为未经解释的字符串
数据操作 操作丰富,涉及多表连接 只有简单的增删改查
存储模式 基于行存储 基于列存储
数据索引 可以对不同列构建多个复杂的索引 只有一个索引-行键
数据维护 新值替换旧值 更新时,旧版本仍会保留
可伸缩性 很难实行横向扩展,纵向扩展也有限 水平扩展性很好

HBase数据模型

1. 概述

(1) HBase是一个稀疏,多维,排序的映射表,索引是:行键、列族、列限定符和时间戳
(2)每个值是未经解释的字符串,没有数据类型
(3)表中每一行有一个排序的行键和任意多的列
(4)表在水平方向由一个或多个列族组成。一个列族里包含任意多的列,同一个列族的数据存储在一起
(5)列族支持动态扩展,可以随意添加列族和列
(6)HBase执行更新操作时,不会删除旧数据,是生成一个新的版本(是基于HDFS只允许追加不允许修改的特性)

2. 相关概念:

表:由行和列构成
行:由行键标识
列族:一个表被分为多个列族,HBase基本的存储单元
列限定符:列名,列族里的数据听过列限定符来定位
单元格:存储数据的单元,通过行、列族和列限定符来确定一个单元
时间戳:每个单元格保存着一份数据的多个版本,通过时间戳来索引
分布式数据库Hbase_第1张图片

3. 数据坐标:

传统数据库采用二维坐标定位,即行和列。HBase采用四维坐标来定位:[行键,列族,列限定符,时间戳]

4. 概念视图(稀疏,多维):

分布式数据库Hbase_第2张图片

5. 物理视图(根据列族分别存放):

分布式数据库Hbase_第3张图片

6. 行式存储和列式存储:

行式存储适用于事务性操作,比如查询某个人的名字,年龄,性别等
列式存储适用于分析数据,比如要分析年龄这个字段。列式存储具有较高的压缩比,因为在列中数据类型基本相同,且数据处理速度也较快

HBase实现原理

1. HBase功能组件

组件 功能
库函数 链接客户端,让其可以访问HBase数据库
Master主服务器 (1)管理和维护 HBase的分区信息 (2)维护Region服务器列表 (3)分配Region,实现负载均衡
Region服务器 存储和维护分配给自己的Region,处理来自客户端的读写请求


1)客户端不在Master主服务器上读取数据,而是在获得Region的存储位置信息后,直接从Region服务器上读取数据
(2)客户端不依赖于Master,而是借助于Zookeeper通过三级寻址的方式来获得Region位置信息,大多数客户端从来不和Master通信

2. 表和Region

(1)一个HBase中有多个表。一个表中存储的行的数量可能非常庞大,无法存储在一台机器上,需要进行分区。根据行键的值对表中的行进行分区,每个行区间构成一个分区,成为“Region”
(2)初始,每个表只有一个Region,随着数据的增多,Region逐渐增大,当一个Region中包含的行数量达到一个阈值会自动分为两个Region,然后分裂出越来越多的Region
(3)Master主服务器将不同的Region分发到不同的Region服务器上。同一个Region只能在一个服务器上,每个Region服务器负责管理一个Region集合

3. Region的定位

一个HBase的表可能非常庞大,会被分裂为多个Region,如何判断Region分到了哪个Region服务器上?

HBase三层结构:

层次 名称 作用
第一层 Zookeeper文件 记录了-ROOT-表的位置信息
第二层 -ROOT-表 记录了.META.表的Region位置信息-ROOT-表只能有一个Region。通过-ROOT-表,就可以访问.META.表中的数据
第三层 .META.表 记录了用户数据表的Region位置信息,.META.表可以有多个Region,保存了HBase中所有用户数据表的Region位置信息

(1) 每个Region有一个唯一的RegionID。".META表"(元数据表)中包含Region和Region服务器的对应关系
(2)Region数量增加时,".META表"中条目会非常多,会分裂为多个Region,又回产生一个新的映射表“-ROOT-表”(根数据表),记录元数据的位置。“-ROOT-表”不能分割,永远只有一个Region存放-ROOT-表,Master知道这个Region的位置

三级寻址

客户端首先访问Zookeeper,获取-ROOT-表的位置信息------->访问-ROOT-表,获取.META.表的文位置信息---------->访问.META.表,找到所需的Region位于哪个服务器,然后到该服务器读取数据

HBase运行机制

1. HBase系统架构

分布式数据库Hbase_第4张图片

分布式数据库Hbase_第5张图片

2. Region服务器的工作原理

分布式数据库Hbase_第6张图片
分布式数据库Hbase_第7张图片
(1)用户读写数据的过程:
写:分配搭配相应的Region服务器去执行,数据首先写入MemStore和HLog中,当写入HLog中,才会返回客户端
读:Region服务器首先访问MemStore缓存,如果不存在,访问StoreFile
(2)缓存的刷新:
MemStore缓存容量有限,系统周期性的将其写入到StoreFile中,清空缓存,并在HLog中写入一个标记,表示缓存内容已经写入到StoreFile中。每次刷新产生一个新的StoreFile文件。
在Region服务器启动时,会检查HLog文件,确认最后一次执行缓存刷新后是否产生新的写入操作,如果存在,要将更新操作写入MemStore中,然后执行缓存刷新,写入StoreFile中。最后,删除旧的HLog文件,为用户提供访问服务
(3)StoreFile的合并:
每次执行缓存刷新都会产生一个新的StoreFile文件,当数量非常多时,要访问某个Store中的值时,必须查找所有的StoreFile文件,耗费时间。当达到一个阈值时,会触发合并操作,将多个StoreFile文件合并成一个大文件

3. Store的工作原理:

分布式数据库Hbase_第8张图片

4. HLog的工作原理:

因为Region服务器可能搭建中廉价机的集群上,当发生故障时,MemStore中的数据会丢失,因此,HBase采用HLog来保证系统发生故障时能够恢复到正确的状态。

用户更新数据时,必须要先记入HLog日志中才能写入MemStore缓存,且直到其对应的日志写到磁盘之后,缓存内容才会被刷新写入磁盘。

当发生故障时,Zookeeper检测到会通知Master,Master处理故障服务器上的HLog文件(包含多个Region对象的日志记录),对HLog数据进行拆分,分别放到相应Region对象的目录下,然后将失效的Region及其日志文件分配到另一个服务器中,重复日志记录中的操作,将数据写入到缓存中,然后刷新到StoreFile文件中,完成恢复

一个Region服务器中所有的Region对象使用一个HLog文件
优点:在多个Region对象进行更新操作时,只需要将日志记录追加到单个日志文件中,减少磁盘寻址次数,提高写操作的性能
缺点:若发生故障,要对HLog按照其所属的Region对象进行拆分

你可能感兴趣的:(HBase,大数据技术,分布式数据库)