[第四章]分布式数据库HBase

概述

BigTable

谷歌的分布式存储系统,解决互联网搜索问题,是一个分布式数据库
  • 建立互联网索引
    • 设计爬虫
    • 在BigTable中运行MapReduce
  • 搜索互联网
    • 根据索引找到目标

存储

存储在(GFS)谷歌的分布式文件系统,Chubby提供协同管理

特点

  • 可扩展
  • 支持大量数据
  • 处理效率高
  • 支持动态伸缩
  • 适于廉价设备
  • 适合读操作不适合写操作

HBase

分布式数据库

特点

  • 高可靠
  • 高性能
  • 面向列
  • 可伸缩
  • 即时查询
  • 用来处理非结构或半结构化的松散数据

存储

存储在HDFS,Zookeeper提供协同服务

Hadoop局限

  • 批量处理
  • 离线处理

传统型(关系)数据库与HBase区别

  • 数据类型
    • 关系模型,数据类型丰富
    • 存不分数据类型,调用时再解释数据类型
  • 数据操作
    • 表和表之间的连接
    • 没有这个操作
  • 存储模式
    • 按行存,完整的结构化数据
    • 按列存,半结构化数据
  • 数据索引
    • 主索引,二次索引等多个索引
    • 行键索引
  • 数据维护
    • 更新后删除旧值
    • 更新不删除
  • 可伸缩性
    • 很难实现横向拓展
    • 拓展灵活

HBase访问接口

  • java 原生api
    • shell
    • Thrift Gateway
    • REST Gateway
  • sql类型接口
    • Pig
    • Hive

HBase数据模型

概述⭐

稀疏的、多维度、排序的映射表
  1. 行键(索引)
  1. 列族(多个属性的集合)
  1. 列限定符(属性)
  1. 时间戳(版本信息)
  • 四个维度确定一个单元格

特点

  • 数据类型是未经解释的字节数组byte[]
  • 每一行可以有任意多的列
  • 列族和列支持动态扩展可以任意添加

概念视图

  • 某些族是空的,所以稀疏

物理视图

按列存储,列族间分别存储
  • 列族中空的行会删除
  • 还存在的列每一项的时间戳和行键会保存

面向列的存储

  • 分析一条信息的完整数据,行式存储更好
    • 适合事务型操作
  • 分析一类特征的所有信息,列式存储更好
    • 适合分析型操作
    • 相似性高,提高数据压缩率

HBase实现原理

功能组件

  • 库函数
    • 链接到每个客户端
  • Master主服务器
    • 管理和维护HBase表的分区信息
    • 对分区信息维护管理
    • 维护Region服务器列表
    • 实时监控整个集群中哪些Region在工作
    • 对Region进行分配
    • 负载平衡
  • Region服务器
    • 负责存储和维护分配给自己的Region
    • 客户端通过Region服务器读取数据
  • Client
    • HBase的访问入口
  • Zookeeper
    • 保证任何时候集群中只有一个HMaser

表和Region

  • 按行键值的字典序分区
  • 每个Region大约1G~2G
  • Region超出最大容量会被拆分,默认最大容量大小是10G
  • 拆分还是属于这个Region服务器
    • 一个Region服务器可以存储10~1000个Region

Region的定位

  • 三层结构实现Region定位⭐
    • Zookepper记录ROOT表位置
    • ROOT表中记录.MATE表位置,只有一个Region
    • .MATE.表存储用户数据表的Region位置信息,太大会拆分成多个Region
  • 计算
    • Region数目=下面相乘
      • ROOT中存的.MATE.表的Region个数
      • 每个.MATE.表的Region可以寻址的用户数据表的Region个数
  • 缓存
    • 客户端.MATE.表的位置信息会缓存起来
    • 惰性机制,客户端Region信息失效后,只有再次调用时才会更新

HBase运行机制

Hbase系统架构

  • 客户端、ZooKeeper、Master、Region服务器

Region服务器工作原理

  • 一个Region服务器有一个Hlog日志文件,多个Region共用一个Hlog
  • 一个Region对象由多个Store组成,Store由一个MemStore和多个StoreFile组成

用户读写数据过程

  • 写入数据中,Region先写入MenmStore、Hlog。然后返回给客户端
  • 读数据时,Region先访问MemStore缓存,数据不存在才区磁盘中的StoreFile寻找

缓存的刷新

  • 系统会周期性把MemStore内容写到StoreFile并在Hlog写入一个标记,产生一个新的StoreFile文件
  • 每次启动,每个Region服务器都会检查自己的Hlog文件,确认最近一次执行缓存刷新操作后是否发生新的写入操作
    • 没有,数据说明保存到StoreFile
    • 有,刷新缓存(更新到MemStore,写入StoreFile文件),删除旧的Hlog,为用户提供数据访问服务

StoreFile合并

  • 当StoreFile数量达到上限会合并

Store工作原理

每个Store对应一个列族的存储
  • Store由一个MemStore和多个StoreFile组成
  • 系统会周期性把MemStore内容写到StoreFile并在Hlog写入一个标记,产生一个新的StoreFile文件
  • StoreFile合并到单个StoreFile太大时触发文件分裂操作,父Region被分为两个子Region

Hlog工作原理

Region发生故障,MemStore丢失,通过HLog恢复
  • ZooKeeper通知Master
  • Master首先处理遗留的故障Region服务器的HLog文件
    • 拆分HLog分到每个对应的Region对象
    • 分配到可用的Region服务器并执行相应的HLog,刷新到磁盘StoreFile中,完成数据恢复

实验操作⭐

Prev
[第三章]分布式文件系统HDFS
Next
[第五章]NoSQL数据库
Loading...
Article List
一个NotionNext搭建的博客
数据库系统概论
大数据原理与应用
javaWeb应用开发基础教程
python
毕业设计
大数据技术综合应用
实训-航空数据系统
java面向对象程序设计
数据结构
算法分析与设计
SPARK
Python爬虫大数据采集与挖掘
云计算
概率论与数理统计
数字逻辑
计算机网络
计算机组成原理
linux
操作系统
人工智能导论
数据仓库与数据挖掘
数据可视化
大数据安全与隐私保护
c语言
C++