分布式数据库HBase

文章目录


前言

一、HBase概述

1.1.1 什么是HBase

  • HBase是一个分布式的、面向列的开源数据库
  • HBase是Google BigTable的开源实现
  • HBase不同于一般的关系数据库, 适合非结构化数据存储
  • HBase是一种分布式、可扩展、支持海量数据存储的 NoSQL数据库。
  • HBase是依赖Hadoop的。为什么HBase能存储海量的数据?因为HBase是在HDFS的基础之上构建的,HDFS是分布式文件系统。
  • HBase在HDFS之上提供了高并发的随机写和支持实时查询,这是HDFS不具备的。
  • 基于「列式存储」,存储数据的“结构”可以地非常灵活。
1.1.2 BigTable
  • BigTable是Google设计的分布式数据存储系统,用来处理海量的数据的一种非关系型的数据库。
    • 适合大规模海量数据,PB级数据;
    • 分布式、并发数据处理,效率极高;
    • 易于扩展,支持动态伸缩
    • 适用于廉价设备;
    • 不适用于传统关系型数据的存储;
1.1.4 什么是非结构化数据存储
  • 结构化数据
    • 适合用二维表来展示的数据

分布式数据库HBase_第1张图片

  • 非结构化数据
  • 分布式数据库HBase_第2张图片
    • 非结构化数据是数据结构不规则或不完整
    • 没有预定义的数据模型
    • 不方便用数据库二维逻辑表来表现
    • 办公文档、文本、图片、XML, HTML、各类报表、图像和音频/视频信息
1.1.5 HBase在Hadoop生态中的地位
  • HBase是Apache基金会顶级项目

  • HBase基于HDFS进行数据存储

  • HBase可以存储超大数据并适合用来进行大数据的实时查询

1.1.6 HBase与HDFS
  • HBase建立在Hadoop文件系统上, 利用了HDFS的容错能力
  • HBase提供对数据的随机实时读/写访问功能
  • HBase内部使用哈希表, 并存储索引, 可以快速查找HDFS中数据
1.1.7 HBase使用场景
  • 瞬间写入量很大
  • 大量数据需要长期保存, 且数量会持续增长
  • HBase不适合有join, 多级索引, 表关系复杂的数据模型
  • 适合场景(大型互联网公司都用HBase)
  • 表数据量大(至少亿级别以上) 写入量大(每天千万级别以上)
  •  append型业务(比如日志,聊天记录等)
  •  读取量相对少(读取:写入<=1/10)
  •  读取场景简单、不经常变化、无排序要求
  •  无跨行跨表事务要求

不适合场景

  • HBase仅支持行级事务(银行业务基本不用HBase)
  • 类似DW等全量读取(hive), 不太适合
     
1.2.4 HBase 与 传统关系数据库的区别
HBase 关系型数据库
数据库大小 PB级别 GB TB
数据类型 Bytes 丰富的数据类型
事务支持 ACID只支持单个Row级别 全面的ACID支持, 对Row和表
索引 只支持Row-key 支持
吞吐量 百万写入/秒 数千写入/秒

二.HBase数据模型

       HBase的设计理念依据google的BigTable论文,论文中对于数据模型的首句介绍

Bigtable是一个稀疏的,分布式的,持久的多维排序的map。

       之后对于映射的解释如下:

该映射由行建,列建和时间戳索引;映射中的每个值都是一个未解释的字节数组。

       最终HBase关于数据模型和BigTable的对应关系如下:

HBase使用与BigTable非常相似的数据模型。用户将数据行存储在带标签的表中。数据行具有可排序的键和任意数量的列。该表存储稀疏,因此如果用户喜欢,同意表中的行可以具有疯狂变化的列。

      最终理解Hbase数据模型的关键在于稀疏,分布式,多维,排序的映射,期中映射map值代非关系型数据库的key-value结构。

2.1、HBase逻辑结构

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

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

逻辑结构分析:

  1.     Region:相当于表,数据量大的时候会进行切片,相当于数据库的水平分表分库。
  2.     store:每个Store其实就是一个列族的数据(所以我们可以说HBase是基于列族存储的)
  3.     列族(Column Family):在HBase里边,先有列族,后有列;可以简单理解为:列的属性类别。
  4.     列(Column Qualifier,列修饰符):在HBase中用列修饰符(Column Qualifier)来标识每个列。
  5.     行键(RowKey):定位一行数据的唯一值。

2.2.HBase物理存储结构

       物理存储结构即为数据映射关系,而在概念试图的空单元格,底层实际根本不存储。

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

分布式数据库HBase_第6张图片

2.3数据模型

1. 表(Table)
HBase采用表来组织数据,表由行和列组成,列划分为若干个列族。

2. 行(Row)
每个HBase表都由若干行组成,每个行由行键(Row Key)来标识。访问表中的行只有3种方式:通过单个行键访问;通过一个行键的区间来访问;全表扫描。

3. 列族(Colume)
一个HBase表被分组成许多“列族”的集合,它是基本的访问控制单元。列族需要在表创建时就定义好,数量不能太多(HBase的一些缺陷使得列族数量只限于几十个),而且不要频繁修改。存储在一个列族当中的所有数据,通常都属于同一种数据类型,这通常意味着具有更高的压缩率。

4. 列限定符
列族里的数据通过列限定符(或列)来定位。列限定符不用事先定义,也不需要在不同行之间保持一致。列限定符没有数据类型,总被视为字节数组byte[]。

5. 单元格
在HBase表中,通过行、列族和列限定符确定一个“单元格”(Cell)。单元格中存储的数据没有数据类型,总被视为字节数组 byte[]。每个单元格中可以保存一个数据的多个版本,每个版本对应一个不同的时间戳。

6. 时间戳
每个单元格都保存着同一份数据的多个版本,这些版本采用时间戳进行索引。每次对一个单元格执行操作(新建、修改、删除)时,HBase都会隐式地自动生成并存储一个时间戳。

三.HBase架构角色

分布式数据库HBase_第7张图片

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

(1) Master实现类为HMaster,负责监控集群中所有的 RegionServer 实例。主要作用如下:“管理元数据表格 hbase:meta,接收用户对表格创建修改删除的命令并执行

(2)监控region 是否需要进行负载均衡,故障转移和region 的拆分。e通过启动多个后台线程监控实现上述功能

        周期性监控region 分布在regionServer 上面是否均衡,由参数 hbase.balancer.period 控周期时间,默认5 分钟。

定期检查和清理hbase:meta中的数据。meta表内容在进阶中介绍。

把master 需要执行的任记录到预写日志WAL中,如果 master 宕机,让 backupMaster读取日志继续干。
(2) Region Server
Region Server 实现类为 HRegionServer,主要作用如下:

  • 负责数据 cell 的处理,例如写入数据 put,查询数据 get 等
  • 拆分合并region 的实际执行者,有 master 监控,有regionServer 执行。

(3)Zookeeper
HBase 通过 7ookeeper 来做 master 的高可用、记录 RegionServer 的部署信息、并且存储有meta 表的位置信息。
HBase 对于数据的读写操作时直接访问 Zookeeper 的,在2.3 版本出 Master Registry模式,客户可以直接访间 master。使月此功能,会加大对 master 的压力,减轻对 Zokeeper的压力。
(4) HDFS
HDFS 为 Hbase 提供最终的底层数据存储服务,同时为 HBase 提供高容错的支持。

扩展知识

一.Dubboy框架(远程过程调用)

1.分布式系统中的相关概念

传统项目和互联网项目

分布式数据库HBase_第9张图片

大型互联网项目的架构目标

分布式数据库HBase_第10张图片

集群和分布式

分布式数据库HBase_第11张图片

分布式数据库HBase_第12张图片

进行集群的服务器-可以进行负载均衡,实现了高性能、高可用的目标

分布式数据库HBase_第13张图片

 同时进行集群和分布式的服务器-除了集群实现的功能和目标,还可以实现可伸缩、高可扩展的目标

分布式数据库HBase_第14张图片

你可能感兴趣的:(分布式,数据库,hbase)