写点什么

HBase 基础及核心架构解析

  • 2021 年 11 月 23 日
  • 本文字数:2204 字

    阅读完需:约 7 分钟

一、HBase 基础

1. HBase 基本介绍

简介


HBase 是 BigTable 的开源 Java 版本。是建立在 HDFS 之上,提供高可靠性、高性能、列存储、可伸缩、实时读写 NoSql 的数据库系统。


它介于 NoSql 和 RDBMS 之间,仅能通过主键(row key)和主键的 range 来检索数据,仅支持单行事务(可通过 hive 支持来实现多表 join 等复杂操作)。


主要用来存储结构化和半结构化的松散数据。


Hbase 查询数据功能很简单,不支持 join 等复杂操作,不支持复杂的事务(行级的事务)Hbase 中支持的数据类型:byte[]与 hadoop 一样,Hbase 目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。


HBase 中的表一般有这样的特点:


  • 大:一个表可以有上十亿行,上百万列

  • 面向列:面向列(族)的存储和权限控制,列(族)独立检索。

  • 稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。


HBase 的发展历程


HBase 的原型是 Google 的 BigTable 论文,受到了该论文思想的启发,目前作为 Hadoop 的子项目来开发维护,用于支持结构化的数据存储。


官方网站:http://hbase.apache.org


  • 2006 年 Google 发表 BigTable 白皮书

  • 2006 年开始开发 HBase

  • 2008 HBase 成为了 Hadoop 的子项目

  • 2010 年 HBase 成为 Apache 顶级项目

2. HBase 与 Hadoop 的关系

HDFS


  • 为分布式存储提供文件系统

  • 针对存储大尺寸的文件进行优化,不需要对 HDFS 上的文件进行随机读写

  • 直接使用文件

  • 数据模型不灵活

  • 使用文件系统和处理框架

  • 优化一次写入,多次读取的方式


HBase


  • 提供表状的面向列的数据存储

  • 针对表状数据的随机读写进行优化

  • 使用 key-value 操作数据

  • 提供灵活的数据模型

  • 使用表状存储,支持 MapReduce,依赖 HDFS

  • 优化了多次读,以及多次写

3. RDBMS 与 HBase 的对比

关系型数据库


结构


  • 数据库以表的形式存在

  • 支持 FAT、NTFS、EXT、文件系统

  • 使用 Commit log 存储日志

  • 参考系统是坐标系统

  • 使用主键(PK)

  • 支持分区

  • 使用行、列、单元格


功能


  • 支持向上扩展

  • 使用 SQL 查询

  • 面向行,即每一行都是一个连续单元

  • 数据总量依赖于服务器配置

  • 具有 ACID 支持

  • 适合结构化数据

  • 传统关系型数据库一般都是中心化的

  • 支持事务

  • 支持 Join


HBase


结构


  • 数据库以 region 的形式存在

  • 支持 HDFS 文件系统

  • 使用 WAL(Write-Ahead Logs)存储日志

  • 参考系统是 Zookeeper

  • 使用行键(row key)

  • 支持分片

  • 使用行、列、列族和单元格


功能


  • 支持向外扩展

  • 使用 API 和 MapReduce 来访问 HBase 表数据

  • 面向列,即每一列都是一个连续的单元

  • 数据总量不依赖具体某台机器,而取决于机器数量

  • HBase 不支持 ACID(Atomicity、Consistency、Isolation、Durability)

  • 适合结构化数据和非结构化数据

  • 一般都是分布式的

  • HBase 不支持事务

  • 不支持 Join

4. HBase 特征简要

  1. 海量存储


Hbase 适合存储 PB 级别的海量数据,在 PB 级别的数据以及采用廉价 PC 存储的情况下,能在几十到百毫秒内返回数据。这与 Hbase 的极易扩展性息息相关。正式因为 Hbase 良好的扩展性,才为海量数据的存储提供了便利。


  1. 列式存储


这里的列式存储其实说的是列族存储,Hbase 是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须指定。


  1. 极易扩展


Hbase 的扩展性主要体现在两个方面,一个是基于上层处理能力(RegionServer)的扩展,一个是基于存储的扩展(HDFS)。通过横向添加 RegionSever 的机器,进行水平扩展,提升 Hbase 上层的处理能力,提升 Hbsae 服务更多 Region 的能力。备注:RegionServer 的作用是管理 region、承接业务的访问,这个后面会详细的介绍通过横向添加 Datanode 的机器,进行存储层扩容,提升 Hbase 的数据存储能力和提升后端存储的读写能力。


  1. 高并发


由于目前大部分使用 Hbase 的架构,都是采用的廉价 PC,因此单个 IO 的延迟其实并不小,一般在几十到上百 ms 之间。这里说的高并发,主要是在并发的情况下,Hbase 的单个 IO 延迟下降并不多。能获得高并发、低延迟的服务。


  1. 稀疏


稀疏主要是针对 Hbase 列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的。

二、HBase 基础架构


  • HMaster


功能


  1. 监控 RegionServer

  2. 处理 RegionServer 故障转移

  3. 处理元数据的变更

  4. 处理 region 的分配或移除

  5. 在空闲时间进行数据的负载均衡

  6. 通过 Zookeeper 发布自己的位置给客户端




  • RegionServer


功能


  1. 负责存储 HBase 的实际数据

  2. 处理分配给它的 Region

  3. 刷新缓存到 HDFS

  4. 维护 HLog

  5. 执行压缩

  6. 负责处理 Region 分片


组件


  1. Write-Ahead logs


HBase 的修改记录,当对 HBase 读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题,数据会先写在一个叫做 Write-Ahead logfile 的文件中,然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。


  1. HFile


这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。


  1. Store


HFile 存储在 Store 中,一个 Store 对应 HBase 表中的一个列族。


  1. MemStore


顾名思义,就是内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在 WAL 中之后,RegsionServer 会在内存中存储键值对。


  1. Region


Hbase 表的分片,HBase 表会根据 RowKey 值被切分成不同的 region 存储在 RegionServer 中,在一个 RegionServer 中可以有多个不同的 region。

猜你喜欢:

  1. 美团数据平台及数仓建设实践,超十万字总结

  2. 上百本优质大数据书籍,附必读清单(大数据宝藏)

  3. 五万字 | 耗时一个月整理出这份Hadoop吐血宝典

发布于: 14 小时前阅读数: 6
用户头像

InfoQ签约作者 2020.11.10 加入

文章首发于公众号:五分钟学大数据。大数据领域原创技术号,深入大数据技术

评论

发布
暂无评论
HBase 基础及核心架构解析