【大数据】大数据期末速通 (四) HBASE

本文

本文基于厦门大学的大数据技术原理与应用MOOC,推荐时间充足的同学认真学习。
https://www.icourse163.org/course/XMU-1002335004

大数据综述

处理架构Hadoop

分布式文件系统HDFS

分布式数据库HBASE

简介

谷歌以前内部大规模网页搜索使用BigTable,HBASE是BigTable的一个开源实现。
HBASE是一个可以用来存储非结构化和半结构化的松散数据的分布式数据库。

【大数据】大数据期末速通 (四) HBASE_第1张图片

HBASE的诞生意义

【大数据】大数据期末速通 (四) HBASE_第2张图片

传统数据库,当数据量增大时,使用“主从服务器”的方法优化,使读的负载分散到相同内容的从服务器,实现性能扩展。然而无法优化“写”负载。

【大数据】大数据期末速通 (四) HBASE_第3张图片
另外的优化方案有

  • 分库:一个业务部门一个库 (无法从根本解决,仍会不断增加)
  • 手动切片,部署到不同服务器(麻烦,要人工操作,效率低)

HBASE与传统数据库的区别

【大数据】大数据期末速通 (四) HBASE_第4张图片

  • 数据操作:耗时的连结等操作被HBASE废弃
  • 数据索引:只支持对行键的简单索引
  • 数据维护:旧版本保留,有时间戳,过期限删除。

HBASE访问接口:

【大数据】大数据期末速通 (四) HBASE_第5张图片

HBASE的数据模型

稀疏的多维度的排序的映射表

【大数据】大数据期末速通 (四) HBASE_第6张图片

  • 通过行键+列族+列限定符+时间戳=某一个具体的数据。
  • 每个值都是未经解释的Bytes数组,需要开发者自行解析。
  • 一行有一个行键和多个列。
  • 列族支持动态扩展,增加减少,支持保留旧版本(HDFS只允许增加,不允许修改)。
  • 列限定符支持动态扩展,增加减少。
  • 一个单元格保留多个时间戳的数据。

定位一个数据需要4个键

【大数据】大数据期末速通 (四) HBASE_第7张图片

数据概念视图

【大数据】大数据期末速通 (四) HBASE_第8张图片
contents为列族,html为列限定符,引号内为值,可以看到,4键确定一个数据 ,且稀疏,这就是为啥称为稀疏的多维度的排序的映射表.

数据物理存储视图

【大数据】大数据期末速通 (四) HBASE_第9张图片
可以看出来,HBASE是列式存储。 列式存储优点在于,取数据的时候一般是提取某个属性分析的,如只需要学生的成绩而不需要住址、籍贯等其他列的信息,行式存储就需要取出一行再提取某几个数据,每行都扫码,相当于全部遍历了一遍。
另外,一般一列数据的数据类型是相关的,按列存储可以带来很高的数据压缩率。

如何选择存储方式?

若以分析型应用为主,则使用列存储。
若以事务型操作较多,则使用行存储。

HBASE的实现原理

【大数据】大数据期末速通 (四) HBASE_第10张图片
master服务器负责:

  1. 分区信息维护管理
  2. Region服务器列表维护
  3. Region服务器哪些在工作,哪些在维护。
  4. 对表Region分配到哪个region服务器进行分配。
  5. 负载均衡

Region服务器负责:

【大数据】大数据期末速通 (四) HBASE_第11张图片

【大数据】大数据期末速通 (四) HBASE_第12张图片
某表刚创建的时候只有一个Region,当某个表的某个Region过大时,进行快速拆分,数据首先指向原地址,当合并结束后生成新文件再指向新地址。不同的Region可能在不同的Region服务器,但同个Region一定在同一个Region服务器。

Region的定位

【大数据】大数据期末速通 (四) HBASE_第13张图片
【大数据】大数据期末速通 (四) HBASE_第14张图片
即访问ZooKeeper服务器知道Root表在哪,
查Root表知道Meta表存哪了,
然后查meta表知道数据表存哪了,
这即三层结构。
【大数据】大数据期末速通 (四) HBASE_第15张图片
【大数据】大数据期末速通 (四) HBASE_第16张图片
为了加速寻址,客户端会缓存位置信息,同时,出现缓存失效问题,再重新三层寻址。

HBASE运行机制

HBASE系统架构

【大数据】大数据期末速通 (四) HBASE_第17张图片
【大数据】大数据期末速通 (四) HBASE_第18张图片
ZooKeeper保证当前只有一个主服务器(Master)运行(可能有多个备用)。
【大数据】大数据期末速通 (四) HBASE_第19张图片

Region服务器工作原理

负责用户数据的存储和管理。
【大数据】大数据期末速通 (四) HBASE_第20张图片

一个Region服务器集群有10-1000个Region服务器
一个Store表示一个列族,Store先写入MemStore,之后周期性写入StoreFile,StoreFile是HDFS的存储格式,使用HFile存储。
【大数据】大数据期末速通 (四) HBASE_第21张图片
【大数据】大数据期末速通 (四) HBASE_第22张图片

Store工作原理

Store即列族,回顾一下列族的物理存储:
【大数据】大数据期末速通 (四) HBASE_第23张图片

【大数据】大数据期末速通 (四) HBASE_第24张图片
每次都生成新storeFile,文件多了,遍历起来就慢,所以合并,文件大了,于是分裂。这就是StoreFile的合并和分裂,同时也是Region的合并和拆分的原因。
【大数据】大数据期末速通 (四) HBASE_第25张图片
合并很耗资源,一般在StoreFile文件数高于某阈值时才合并。
【大数据】大数据期末速通 (四) HBASE_第26张图片

HLog工作原理

【大数据】大数据期末速通 (四) HBASE_第27张图片
先写入日志,再写MemStore,
一个Region服务器拥有多个Region,一个HLog,一个HLog保证写性能较高。

HLog应用方案

性能优化

【大数据】大数据期末速通 (四) HBASE_第28张图片
【大数据】大数据期末速通 (四) HBASE_第29张图片
【大数据】大数据期末速通 (四) HBASE_第30张图片
【大数据】大数据期末速通 (四) HBASE_第31张图片

性能检测

【大数据】大数据期末速通 (四) HBASE_第32张图片
可以使用SQL语句对HBase进行数据查询
【大数据】大数据期末速通 (四) HBASE_第33张图片
【大数据】大数据期末速通 (四) HBASE_第34张图片
二级索引:
【大数据】大数据期末速通 (四) HBASE_第35张图片
通过索引表进行索引(插入数据时同时插入索引,插两次,性能降低)

操作

http://dblab.xmu.edu.cn/blog/2442-2/
HBase中用create命令创建表,具体如下:

  create 'student','Sname','Ssex','Sage','Sdept','course'

请添加图片描述

此时,即创建了一个“student”表,属性有:Sname,Ssex,Sage,Sdept,course。因为HBase的表中会有一个系统默认的属性作为行键,无需自行创建,默认为put命令操作中表名后第一个数据。创建完“student”表后,可通过describe命令查看“student”表的基本信息。
【大数据】大数据期末速通 (四) HBASE_第36张图片
在添加数据时,HBase会自动为添加的数据添加一个时间戳,故在需要修改数据时,只需直接添加数据,HBase即会生成一个新的版本,从而完成“改”操作,旧的版本依旧保留,系统会定时回收垃圾数据,只留下最新的几个版本,保存的版本数可以在创建表的时候指定。

  • 添加数据
put 'student','95001','Sname','LiYing'

即为student表添加了学号为95001,名字为LiYing的一行数据,其行键为95001。

put 'student','95001','course:math','80'

即为95001行下的course列族的math列添加了一个数据。

  • 删除数据
  delete 'student','95001','Ssex'

即删除了student表中95001行下的Ssex列的所有数据。【大数据】大数据期末速通 (四) HBASE_第37张图片

  • 查看数据
  get 'student','95001'

命令执行截图如下, 返回的是‘student’表‘95001’行的数据。
【大数据】大数据期末速通 (四) HBASE_第38张图片

你可能感兴趣的:(学习笔记,大数据,hbase,hadoop)