#学习笔记#章四-分布式数据库HBase-厦大

1. 简介

HBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,是谷歌BigTable的开源实现,主要用来存储非结构化和半结构化的松散数据。HBase的目标是处理非常庞大的表,可以通过水平扩展的方式,利用廉价计算机集群处理由超过10亿行数据和数百万列元素组成的数据表

#学习笔记#章四-分布式数据库HBase-厦大_第1张图片
hadoop-envm.png

4.1.3 HBase与传统关系数据库的对比分析

•HBase与传统的关系数据库的区别主要体现在以下几个方面:
•(1)数据类型:关系数据库采用关系模型,具有丰富的数据类型和存储方式,HBase则采用了更加简单的数据模型,它把数据存储为未经解释的字符串
•(2)数据操作:关系数据库中包含了丰富的操作,其中会涉及复杂的多表连接。HBase操作则不存在复杂的表与表之间的关系,只有简单的插入、查询、删除、清空等,因为HBase在设计上就避免了复杂的表和表之间的关系
•(3)存储模式:关系数据库是基于行模式存储的。HBase是基于列存储的,每个列族都由几个文件保存,不同列族的文件是分离的
•(4)数据索引:关系数据库通常可以针对不同列构建复杂的多个索引,以提高数据访问性能。HBase只有一个索引——行键,通过巧妙的设计,HBase中的所有访问方法,或者通过行键访问,或者通过行键扫描,从而使得整个系统不会慢下来
•(5)数据维护:在关系数据库中,更新操作会用最新的当前值去替换记录中原来的旧值,旧值被覆盖后就不会存在。而在HBase中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧有的版本仍然保留
•(6)可伸缩性:关系数据库很难实现横向扩展,纵向扩展的空间也比较有限。相反,HBase和BigTable这些分布式数据库就是为了实现灵活的水平扩展而开发的,能够轻易地通过在集群中增加或者减少硬件数量来实现性能的伸缩

4.3.2 数据模型相关概念

#学习笔记#章四-分布式数据库HBase-厦大_第2张图片
data-model.png

4.3.3 数据坐标

HBase中需要根据行键、列族、列限定符和时间戳来确定一个单元格,因此,可以视为一个“四维坐标”,即[行键, 列族, 列限定符, 时间戳]

#学习笔记#章四-分布式数据库HBase-厦大_第3张图片
place.png

4.3.4 概念视图

其实就是空的部分不存进存储部分,只切分存储数据的部分。

#学习笔记#章四-分布式数据库HBase-厦大_第4张图片
HBase数据的概念视图.png
#学习笔记#章四-分布式数据库HBase-厦大_第5张图片
HBase数据的物理视图.png

4.3.6 面向列的存储

为什么要采用面向列的存储?

  1. 同一列的数据类型是很相似的,所以它具有很高的压缩率。

  2. 现在的分析很多是针对整体的某一个特性的分析,例如使用这个产品的年龄段,性别比,等等。行存储效率低,它需要扫描全表每一行,再提取那一列的信息;列存储,则是直接取出来则可。

#学习笔记#章四-分布式数据库HBase-厦大_第6张图片
行式数据库和列式数据库示意图.png

4.4 HBase的实现原理

4.4.1 HBase的系统架构

HBase的实现包括三个主要的功能组件:
–(1)库函数:链接到每个客户端
–(2)一个Master主服务器
–(3)许多个Region服务器

#学习笔记#章四-分布式数据库HBase-厦大_第7张图片
HBase的系统架构.png
  1. 客户端
    –客户端包含访问HBase的接口,同时在缓存中维护着已经访问过的Region位置信息,用来加快后续数据访问过程

  2. Zookeeper服务器
    –Zookeeper可以帮助选举出一个Master作为集群的总管,并保证在任何时刻总有唯一一个Master在运行,这就避免了Master的“单点失效”问题

  3. Master
    •主服务器Master主要负责表和Region的管理工作:
    –管理用户对表的增加、删除、修改、查询等操作
    –实现不同Region服务器之间的负载均衡
    –在Region分裂或合并后,负责重新调整Region的分布
    –对发生故障失效的Region服务器上的Region进行迁移

  4. Region服务器
    –Region服务器是HBase中最核心的模块,负责维护分配给自己的Region,并响应用户的读写请求

4.4.2 Region的定位

•元数据表,又名.META.表,存储了Region和Region服务器的映射关系
•当HBase表很大时, .META.表也会被分裂成多个Region
•根数据表,又名-ROOT-表,记录所有元数据的具体位置
•-ROOT-表只有唯一一个Region,名字是在程序中被写死的
•Zookeeper文件记录了-ROOT-表的位置

#学习笔记#章四-分布式数据库HBase-厦大_第8张图片
HBase的三层结构.png
#学习笔记#章四-分布式数据库HBase-厦大_第9张图片
HBase的三层结构中各层次的名称和作用.png

4.5.2 Region服务器工作原理

  1. 用户读写数据过程:
    用户写入数据时,被分配到相应Region服务器去执行
  2. 缓存的刷新:
    系统会周期性地把MemStore缓存里的内容刷写到磁盘的StoreFile文件中,清空缓存,并在Hlog里面写入一个标记
  3. StoreFile的合并
    合并操作比较耗费资源,只有数量达到一个阈值才启动合并
#学习笔记#章四-分布式数据库HBase-厦大_第10张图片
Region服务器向HDFS文件系统中读写数据.png

4.5.3 Store工作原理

核心就是大小要适中,不然会引发合并或分裂操作。

•Store是Region服务器的核心
•多个StoreFile合并成一个
•单个StoreFile过大时,又触发分裂操作,1个父Region被分裂成两个子Region

#学习笔记#章四-分布式数据库HBase-厦大_第11张图片
StoreFile的合并和分裂过程.png

4.5.4 HLog工作原理

出错时找log。

•分布式环境必须要考虑系统出错。HBase采用HLog保证系统恢复
•HBase系统为每个Region服务器配置了一个HLog文件,它是一种预写式日志(Write Ahead Log)
•用户更新数据必须首先写入日志后,才能写入MemStore缓存,并且,直到MemStore缓存内容对应的日志已经写入磁盘,该缓存内容才能被刷写到磁盘

4.6.3 在HBase之上构建SQL引擎

NoSQL区别于关系型数据库的一点就是NoSQL不使用SQL作为查询语言,至于为何在NoSQL数据存储HBase上提供SQL接口,有如下原因:

1.易使用。使用诸如SQL这样易于理解的语言,使人们能够更加轻松地使用HBase。

2.减少编码。使用诸如SQL这样更高层次的语言来编写,减少了编写的代码量。

方案:
1.Hive整合HBase
2.Phoenix

4.6.4 构建HBase二级索引

#学习笔记#章四-分布式数据库HBase-厦大_第12张图片
HBase.png

优点: 非侵入性:引擎构建在HBase之上,既没有对HBase进行任何改动,也不需要上层应用做任何妥协

缺点:每插入一条数据需要向索引表插入数据,即耗时是双倍的,对HBase的集群的压力也是双倍的

4.7 HBase编程实践

待做


2018.6.15 以上是学习笔记,课程来自中国大学MOOC

《大数据技术原理与应用》 厦门大学计算机科学系 林子雨

你可能感兴趣的:(#学习笔记#章四-分布式数据库HBase-厦大)