分布式数据仓库 HBase

关系型数据库基本概念

关系型数据库简介

  • 关系型数据库的功能及特点
    –基于事务的ACID机制,数据强一致性
    –参照完整性
    –采用标准的SQL进行数据操作
    –适合事务性操作
    –物理结构基于行进行存储
  • 关系型数据库存在的问题
    -–数据量急剧增长会导致数据库变慢
    –索引带来的额外负载
    –不适合超大规模的数据分析操作
  • 解决方案
    –读写分离
    –增加缓存,如memcached
    –数据分区

数据结构介绍

结构化数据

  结构化数据具有固定的结构,属性划分,以及类型等信息。我们通常所理解的关系型数据库中所存储的数据信息,大多是结构化数据, 如职工信息表,拥有ID、Name、Phone、Address等属性信息。
  结构化数据通常直接存放在数据库表中。数据记录的每一个属性对应数据表的一个字段。

非结构化数据

  无法用统一的结构来表示。如文本文件、图像、视频、声音、网页等信息。
  数据记录较小时(如KB级别),可考虑直接存放到数据库表中(整条记录映射到某一个列中),这样也有利于整条记录的快速检索。
  数据较大时,通常考虑直接存放在文件系统中。数据库可用来存放相关数据的索引信息。

半结构化数据

  具有一定的结构,但又有一定的灵活可变性。典型如XML、HTML等数据。其实也是非结构化数据的一种。可以考虑直接转换成结构化数据进行存储。
  根据数据记录的大小和特点,选择合适的存储方式。这一点与非结构化数据的存储类似。

 

存储方式介绍

按行存储

请添加图片描述
按行存储:数据按行存储在底层文件系统中。通常,每一行会被分配固定的空间。
优点:

  • 有利于增加/修改整行记录等操作;
  • 有利于整行数据的读取操作。

缺点:

  • 单列查询时,会读取一些不必要的数据。

按列存储

请添加图片描述

按列存储:数据以列为单位,存储在底层文件系统中。
优点:

  • 有利于面向单列数据的读取/统计等操作。

缺点:

  • 整行读取时,可能需要多次I/O操作。

 

HBase逻辑概念与实例

HBase基本定义

HBase(Hadoop DataBase)起源于Google Bigtable,它是基于Key-Value列式存储格式系统,它是一个分布式的数据库,并支持海量数据的存储,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。

  • 适合于存储大表数据(表的规模可以达到数十亿行以及数百万列),并且对大表数据的读、写访问可以达到实时级别;
  • 利用Hadoop HDFS(Hadoop Distributed File System)作为其文件
    存储系统,提供实时读写的分布式数据库系统;
  • 利用ZooKeeper作为协同服务。

HBase应用场景

  • 海量数据(TB、PB)
  • 高吞吐量
  • 需要在海量数据中实现高效的随机读取
  • 需要很好的性能伸缩能力
  • 能够同时处理结构化和非结构化的数据
  • 不需要完全拥有传统关系型数据库所具备的ACID特性

HBase产品定位

HBase作为一个高可靠性、高性能、面向列、可伸缩的分布式数据库,提供海量数据存储功能,用来解决关系型数据库在处理海量数据时的局限性。

HBase设计目标

–海量数据量存储
–高并发操作
–数据随机读写操作
–数据强一致性

HBase逻辑概念表

表Table
–Hbase以表为单位组织数据

行Row
–表中数据以行为单位,byte[]存储

行键RowKey

row key是用来检索记录的主键
各行数据按RowKey以字典序排序
访问Hbase Table中的行,只有三种方式
 —— 通过单个row key访问
 —— 通过row key的range
 —— 全表扫描

请添加图片描述

HBase逻辑概念

  • 列族Column Family
    –各行数据列族相同,但不是每个列族中都需要有数据
  • 列限定符Column Qualifier
    –HBase表中的每个列,都归属与某个列族
  • 单元格Cell
    –HBase表中的每个列,都归属与某个列族
    –单元格存放的数据成为单元格的值,没有类型,byte[]存储
  • 时间戳Timstamp
    –单元格的值可以有多个版本,各个版本由版本号区分
    –默认版本号为值被写入的时间戳

请添加图片描述

HBase逻辑视图实例

请添加图片描述
HBase表的特点

  • 表可以很大
    –单个表可以有数十亿行,上百万列
  • 无模式
    –每行有任意多的列,列可以动态增加,不同行可以有不同的列,列的类型没有限制
  • 面向列族的存储
    –面向列族的存储和权限控制,支持列族独立检索
  • 稀疏
    –空(null)列不占存储空间,表可以非常稀疏
  • 数据多版本
    –每个单元格中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳
  • 数据类型单一
    –所有数据都是byte[]数组,没有类型

 

HBase物理概念与架构

Region
–region是Hbase中分布式存储和负载的最小单元
–单个table一开始只有一个region
–随着记录越来越多,单个region太大,达到阈值,分裂成2个region(region split)

RegionServer
–不同region分布在不同的RegionServer上。

Store
–Region虽然是分布式存储的最小单元,但不是存储的最小单元
–Region由多个store组成,每个store保存个Column Family
–每个store由1个MemStore和0到多个StoreFile组成
–MemStore存储在内存中,StoreFile存储在HDFS上,底层称为Hfile

HFile
–存储排序的key-value映射结构
–文件由连续的块(默认64K)组成,块的索引信息存储在文件尾部
–打开Hfile时会优先在内存中加载块信息请添加图片描述
——HFile Compaction(压缩)
HFile Compaction压缩策略

  • Compact
    –把多个小的HFile合并成一个大的文件
    –减少HFile数量,提升读效率
    –执行时严重影响HBase性能
    –触发后不能停止

  • Minor Compact
    –把多个小的HFile合成数量较少的大的Hfile
    –合并较快,但是会影响磁盘IO

  • Major Compact
    –一个store下的所有文件合并
    –删除过期版本数据
    –删除delete marker数据
    –指定间隔时间或手动执行

请添加图片描述
 

HBase的架构

请添加图片描述
 

HBase基本组件

  • HMaster

–管理用户对table的创建删除修改操作
–为Region server分配region
–负责Region server的负载均衡
–发现失效的Region server并重新分配其上的region

  • Region Server

–维护region,处理对这些region的IO请求,直接与client进行数据通信
–负责切分(split)在运行过程中变得过大的region
–对region进行compact操作
–在运行中可以动态添加、删除

  • Client

–包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息

  • ZooKeeper

–通过选举,保证任何时候,集群中只有一个HMaster,HMaster与RegionServer启动时会ZooKeeper注册。
–存储所有Region的寻址入口。
–实时监控Region server的上线和下线信息,并实时通知给HMaster。
–存储HBase的schema和table元数据,如column family。
–Zookeeper的引入使得HMaster不再是单点故障。

 

HBase容错与恢复

HBase容错

  • HMaster容错

–多个HMaster,同一时间只有一个active
–HMaster失效,由ZooKeeper选择另一个HMaster
–若无Hmaster:

  • 读操作正常进行,因为region信息还在

  • region切分、负载均衡无法进行

  • RegionServer容错
    –定时向Zookeeper发送心跳
    –超时则HMaster将该RegionServer上的Region重新分配到其他RegionServer

HBase修复

  • HLog

–HLog是一个实现Write Ahead Log类,每次写入HLog
–每个RegionServer维护一个HLog
–HLog定期删除旧的文件(已经持久化到HFile的数据)

  • RegionServer意外中止

–HMaster通过ZooKeeper感知
–处理HLog,针对不同的Region拆分Log数据
–重新分配失效region
–通过HLog信息重新写进MemStore,然后flush到HFile

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2023年2月25日 下午12:26
下一篇 2023年2月25日 下午12:27

相关推荐