HBase介绍: 走进大数据存储的世界

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: HBase非常好地契合了大数据存储的特性。首先是HBase具有突出的数据写入能力,在面对大数据的特性时,可以快速地把数据处理消化。另外HBase具有超强弹性升缩能力,在面对大数据的体量的时候,能够无限水平扩展来存储数据。同时,HBase具有强大的业务适应能力,适应业务的变化多端,从而能够满足大数据的特点。最后,HBase具有高效的多维删除能力,来满足大数据真实性、脏数据的特点,能够帮助用户快速处理脏数据和过期 数据。简而言之,HBase是一个为大数据而生的数据库。

大数据与HBase

(一)数据库的发展

1-1.png

数据库诞生于二十世纪的50年代,当时的应用场景仅限于国防、科研等大型应用场景。70年代小型机开始出现,随之出现的是我们所熟悉的关系型数据库,如IBM的DB 2、Oracle、INGRES等。90年代PC机开始普及,一些企业开始做信息化转型,ERP/CRM/财务软件开始涌现,这些软件都是运行在廉价的X86服务器和PC机上,所用的数据库是开源或商业的MySQL、SQL Server、PostgreSQL 等。2000年后进入互联网大数据时代,数据急剧膨胀,传统的单机关系数据库已经无法满足时代处理数据的需求,因此开始涌现一些像HBase,Redis、MongoDB的NoSQL数据库。


2015年之后,我们进入了云时代,涌现一批云原生数据库,如阿里云的Lindorm、AnalyticDB及PolarDB等,本文聚焦大数据时代,下面来看一下大数据发展的趋势。


(二)数据趋势

1-2.png

如上图所示,大数据发展的显著特征是数据量呈几何基数爆炸增长。


经统计,2005年刚进入互联网时,全网的数据为0.1个ZB(1ZB=100万PB)左右。到了2020年,数据量急剧增长到了47 个ZB。随着 IoT万物互联的兴起,预计到2025年的时候,数据量会达到163个ZB。

1-3.png

除了数据量越来越多,数据种类也是日益丰富。如聊天记录,网购订单记录以及物流的详情,包括风控、机器学习、视频、音频、图像等。要从这些海量的数据中去挖掘出有价值的信息,是一件非常困难的事情。


(三)大数据的特点

1-4.png

大数据具有如下四个特点:


  • 大容量

1)体量大,增长快

2)水平扩展成为基本需求


  • 半结构化

1)丰富的数据类型

2)列具有发散性


  • 高速度

1)高速读写
2)往往会遇到IO瓶颈


  • 真实性

1)脏数据成为常态
2)数据质量挑战大 从上面四个特点可以看出,传统RDBMS已经无法满足大数据需求。


(四)Google的三驾马车


面对上述问题,Google率先提出处理大数据的三驾马车:GFS、BigTable和MapReduce。

它们的设计哲学很简单,就是把单机变成分布式的处理架构,同时这个软件能够运行在比较廉价的商业X86服务器上。

1-5.png

GFS(Google File System)

  1. 分布式文件系统
  2. Master+ChunkServer
  3. 追加模型

1-6.png

MapReduce

  1. 分布式计算系统
  2. 离线批处理
  3. Map-Reduce模型

1-7.png

BigTable

  1. 分布式表格系统
  2. Master+多TableServer
  3. Schema Free

Google File System(GFS)是一个分布式文件系统,当遇到一台机器存不下一个文件,就把它切片然后分到多个机器上存储。


BigTable是一个分布式表格系统,当遇到一台机器存不下一个表格,就把它的数据进行分片,然后分布到各个机器上。


MapReduce是一个分布式计算系统,当遇到一台机器的算力不够,就把这些计算任务分到各个机器上,然后做Reduce把结果做汇总。


(五)BigTable和HBase

1-8.png

后来有人根据Google的三驾马车研发了一个开源系统叫做Hadoop,HBase基于BigTable论文在Hadoop生态中的开源实现。


(六)HBase的历史


2006年,HBase诞生于Powerset,一家从事于自然语言处理和搜索的创业公司,该公司之后被微软收购。 HBase基于BigTable论文实现,最初用途是为了解决Hadoop中随机读效率低下的问题。


2007年4月,HBase作为一个模块提交到Hadoop的代码库中,代码量为8000行。HBase最初的开发人员是Michael Stack和Jim Kellerman。


2010年5月,HBase成为Apache的顶级项目。同年,Facebook把HBase使用在其消息平台中,这是HBase大规模商业 化使用的开始。


(七)Apache HBase项目现状

1-9.png

1-10.png

1-11.png

  • HBase仍然是Apache社区最活跃的项目之一。
  • 有众多来自中国的Committer/PMC。
  • 张铎目前为Apache HBase社区主席。


HBase的架构与原理

(一)HBase基本概念page6image38563840


HBase(Hadoop Database)是一个基于Google BigTable论文设计的高可靠性、高性能、可伸缩的分布式存储系统。 HBase有以下四个特点:


·数据模型
1)Schema Free

2)无数据类型

3)大宽表

4)行存储,列模型


·系统架构

1)原生分布式架构

2)自动分区

3)专为海量数据设计


·读写能力

1)高吞吐,低延迟

2)支持随机/范围查询

3)适用在线/离线场景


·特色功能

1)TTL

2)多版本

3)离线导入

4)Coprocessor

5)......


(二)HBase数据模型

1-12.png

上方为数据模型,HBase所有数据都存储在一个表格里,表格下面有不同的列簇,每一个列簇里有非常多的行,每一行里 有非常多的列。因为HBase是一个松散Schema架构,不同行的列可以是不一样的,比如row1这行没有ColumnB,那么 这一列不会占用存储空间。同时,每一列可以有不同的值,这些值可以用timestamp作为版本号来区分。


HBase列簇的数据是存储在一起的,从这个角度上来说,HB是一个列储。但是,每个列簇里不同行,是按行的格式去存 储的,从这个角度上来说,可以认为HBase是一个行储。


然后,可以通过HBase的Rowkey和ColumnFamily加上Column的名字,再加上timestamp,作为key可以唯一确定一个 value,所以从这个角度,HBase也是一个KV存储。


(三)HBase架构

1-13.png

上图为HBase架构,它有三个非常明显的特征。


首先,它是一个原生分布式架构。在这个系统中,HMaster只是做一些分布式的协调工作,真正服务用户请求的是 HRegionServer,它是一个可以无限水平扩展的架构,用户数据会通过切片的方式负载均衡到每个HRegionServer上。


第三个主要特征是存储计算分离,HBase本身不存储任何数据,所有的数据都是存储在底层的HData上。


1.分布式设计

1-14.png

Zookeeper

1)存储Master、RegionServer、Meta表的服务器地址;

2)存储Table的状态;
3)存储Region分配时的状态。


HMaster

1)主备模式,利用Zookeeper协调;

2)负责Region分配,负载均衡;

3)负责Region管理,灾难恢复。


HRegionServer

1)维护Region状态;

2)负责处理put/get/scan等IO请求;

3)向Master汇报监控状态。


Client

1)数据增删改查操作;

2)负责数据的路由信息;

3)通过Cache Region位置加速访问。


2.数据分片

1-15.png

上方为HBase的数据分片。它是一个范围分片,把数据按照范围分布在各个Region里。这样的好处是可以根据范围从头 查到尾,而不是像哈希分区一样,分区之间都是无序。范围分片可以有序地把这一个表从头遍历到尾,当数据写到一个 Region中,这个Region会变大,当它变大到一定的阈值之后,HBase会自动把它分裂成两个Region,然后通过负载均 衡的算法,把这些Region平均分配到不同的Region Servers上。


当运行的时间较长,Region可能数据会空掉,此时可以在线发起一个Merge,把两个Region Merge在一起,从而减少内 存占用。因此,HBase在分片这一方面是非常方便的。


3.存储计算分离

1-16.png

HBase本身不会存储任何数据,它本身一些读的Cache和写的MemStore,主要是做读写缓冲,主要的持久化都会发生在 HDFS上,这样做有什么好处呢?


首先,它可以做快速的负载均衡,比如RegionServerA负载比较高了,要把RegionServerA迁移到RegionServerB上 去,那么它只需要在RegionServerA上发起一个关闭命令,然后在RegionServerB上打开Region所在的HDFS文件,就 可以开始服务,完全不用搬迁数据,这个速度也是非常快,基本在百毫秒级别。


有了存储计算分离之后,还可以独立扩缩计算节点和存储节点,当计算不够用的时候,可以单独去扩RegionServer。当 存储不够用的时候,可以单独扩大存储节点。


同时,使用HBase开源软件之后,还可以做成本优化,利用HDFS的异构介质引入像OSS、S3这样的低成本存储来降低 成本。也可以利用开源技术,比如Erasuer coding来降低我们的存储大小,也是为了降低成本。


(四)HBase读写原理

1.请求路由

1-17.png

首先,我们来看一下客户端的路由请求。

客户端如果要发送一个请求到服务器,比如要读写某一行数据,首先会去跟Zookeeper要meta region所在的RegionServer 地址,之后就会往meta region所在的Server发请求,问所要的数据在哪个位置。之后直接往RegionServer发信息读写 数据,Client也会把这次成功请求的信息缓存在本地,当下一次要访问这个范围数据的时候,就不需要去跟Zookeeper和 RegionServer做交互,可以直接访问这个服务器。

当然,如果发生了负载均衡,Region已经不在这个服务器上,HBase再往这个服务器发信息的时候,它会收到一个报错,之后它又会重新开启这样的路由操作,直到找到这一个Region新的位置。


2.LSM-Tree

1-18.png

说到HBase的读写,不得不提LSM-Tree架构。HBase使用LSM-Tree(Log-Structured Merge-Trees)作为存储模型。


使用LSM-Tree的好处是可以把随机写变成顺序写,因此它的读写吞吐比使用B+树的引擎数据库要高出非常多。在写入的时候,首先HBase把数据缓存在MemStore里,然后顺序地写一个Log来做灾难恢复,然后内存中的数据也会定期地flush在磁盘上,flush出来数据是不能更改的,它相当于一棵不能更改的B树,当我们在读的时候,会把多个这样的文件 Merge起来做数据的读取。


3.读流程

1-19.png

上图为HBase的读流程。


在读的时候,首先会根据查询的条件选择到对应的Region和Store,这个Store就是前文所说的列簇,然后会根据条件去 过滤掉这些数据不可能存在的文件,把过滤出来的文件形成一个KeyValue Heap,然后再根据从小到大的顺序把这些数据 返回给客户端。


HBase 有 Memstore 和 Block Cache,Memstore 的位置和 HFile 的位置是等价的,会和HFile一起去构建Heap。所谓的 Block Cache,它实际上是文件某一个部分的 Cache。当要读到文件的部分时,发现有 Cache 的时候,可以不用去读这一 个磁盘,而是直接读内存。所以读写架构是先读Cache再做磁盘,把所有的数据都构成一个Heap来做LSM-Tree的架构。


(五)HBase特色功能


1.TTL


大家知道,在MySQL删除过期数据是非常麻烦的,首先要写个脚本,把这些过期数据的具体条件选出来,然后再一一 删。除此之外,还要控制脚本的速度,因为一旦删快,可能会影响到线上系统。


这种场景在HBase中得到妥善解决。


HBase的每一列都会有一个时间戳,如果没有指定时间戳,时间戳默认是这一列数据的写入时间。根据这个时间戳可以设 置一个TTL过期时间,当这一列数据超过了TTL过期时间,HBase会自动删掉过期数据。


特性介绍

1)对于每一行中的每一列数据,系统都保存了其最后更新时间;
2)以秒为单位来设置TTL(Time To Live)长度,每一行中的每一列数据一旦达到了到期时间,系统将自动删除;

3)TTL设置支持表、行、列多个维度。


使用场景
1)适用于无需永久保存的数据;
2)常用语日志、监控、轨迹、浏览记录、费用详单等场景。

1-20.png

2.多版本


特性介绍

1)当数据更新后,之前旧版本仍然可以被访问;

2)旧版本的数量可以设定至多达上百万;

3)系除多余的旧版本。


使用场景

1)适用于需要维护最近N次变更值的数据,如浏览记录、轨迹记录、登录记录、交易记录等;

2)常用于实时推荐、安全风控、营销圈人等场景。


:保留版本数为100,则系统中会为设备1001的“上次登录时间”、“上次登录城市”字段最多保留100条记录,超出部分自动删除,等价于维护最近100次的登录时间和城市。

1-21.png

3.Bulkload

1-22.png

HBase的另一大特色功能是Bulkload。


HBase是一个LSM-Tree的架构,可以通过一些外部的系统,比如说Spark等,预先把这些数据做好排序,把它写在 HDFS上,然后通过Bulkload瞬间载入到HBase的Region当中,这些数据立马就可以读了。这个过程相比正常的API的少 了一些非常繁杂的计算过程,实现离线生成HFile,秒级加载海量数据。


4.Coprocessor


HBase还有一个特性是Coprocessor,有了Coprocessor之后,用户可以把HBase变成任何业务处理系统。HBase的 Coprocessor分为两类,分别是EndPoint和Observer。


1-23.png

EndPoint

1)分布式计算

2)算子下推


以前实现counter要去数据,必须把这些数据全部拉到客户端一条条地数。有了EndPoint Coprocessor之后,用户可以把 自己的逻辑嵌入到HBase的RegionServer上,通过HBase的分布式实现分布式计算以及计算下推。


像Count这个场景的话,可以先在RegionServer上把这些数据全部Count,然后再在客户端上做一个汇总,这样就少了非 常多的数据传输内容。

1-24.png

Observer

1)Hook HBase内部逻辑
2)实现触发器


通过Observer,用户可以任意用Hook HBase的函数来实现触发器的功能。


HBase使用场景


(一)HBase的生态

1-25.png

HBase的生态是非常丰富的,社区对HBase的定义也是专注做大数据存储,而上层这些场景我们更愿意交给生态产品去实现。


比如说HBase加一个Phoenix来实现SQL访问,也可以通过MR、Spark、Hive分析类组件给HBase做一个分析系统,也可以和Flink结合,成为Flink围表和结构表的存储,实现流式的计算。


(二)HBase的场景

1-26.png

有了这些生态之后,HBase基本上可以满足所有大数据场景的需求。


使用HBase原生API,可以实现一些非常高性能的访问场景,比如推荐画像、订单存储、Feeds流等。也可以在HBase基础上加一些组件来实现其他的场景的使用,比如加上Phoenix之后,我们可以把HBase变成一个NewSQL的数据库。


(三)使用HBase的公司

1-27.png

如此庞大数量的企业在使用HBase,其中一个很大的原因就是HBase背后没有一家商业公司做商业控制,所有用户可以 自由下载HBase提供的代码,因此许多大厂都积极地向HBase贡献功能和代码,让HBase的功能变得更加丰富与强大, 性能和稳定性也在逐步提高。


总结

1-28.png

HBase非常好地契合了大数据存储的特性。


首先是HBase具有突出的数据写入能力,在面对大数据的特性时,可以快速地把数据处理消化。


另外HBase具有超强弹性升缩能力,在面对大数据的体量的时候,能够无限水平扩展来存储数据。


同时,HBase具有强大的业务适应能力,适应业务的变化多端,从而能够满足大数据的特点。


最后,HBase具有高效的多维删除能力,来满足大数据真实性、脏数据的特点,能够帮助用户快速处理脏数据和过期 数据。


简而言之,HBase是一个为大数据而生的数据库。

相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
存储 算法 固态存储
大数据分区优化存储成本
大数据分区优化存储成本
37 4
|
2月前
|
存储 监控 分布式数据库
百亿级存储架构: ElasticSearch+HBase 海量存储架构与实现
本文介绍了百亿级数据存储架构的设计与实现,重点探讨了ElasticSearch和HBase的结合使用。通过ElasticSearch实现快速检索,HBase实现海量数据存储,解决了大规模数据的高效存储与查询问题。文章详细讲解了数据统一接入、元数据管理、数据一致性及平台监控等关键模块的设计思路和技术细节,帮助读者理解和掌握构建高性能数据存储系统的方法。
百亿级存储架构: ElasticSearch+HBase 海量存储架构与实现
|
2月前
|
存储 消息中间件 大数据
大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解
大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解
50 4
|
2月前
|
消息中间件 存储 缓存
大数据-71 Kafka 高级特性 物理存储 磁盘存储特性 如零拷贝、页缓存、mmp、sendfile
大数据-71 Kafka 高级特性 物理存储 磁盘存储特性 如零拷贝、页缓存、mmp、sendfile
78 3
|
2月前
|
存储 消息中间件 大数据
大数据-70 Kafka 高级特性 物理存储 日志存储 日志清理: 日志删除与日志压缩
大数据-70 Kafka 高级特性 物理存储 日志存储 日志清理: 日志删除与日志压缩
52 1
|
2月前
|
存储 消息中间件 大数据
大数据-68 Kafka 高级特性 物理存储 日志存储概述
大数据-68 Kafka 高级特性 物理存储 日志存储概述
33 1
|
3月前
|
存储 分布式计算 分布式数据库
深入理解Apache HBase:构建大数据时代的基石
在大数据时代,数据的存储和管理成为了企业面临的一大挑战。随着数据量的急剧增长和数据结构的多样化,传统的关系型数据库(如RDBMS)逐渐显现出局限性。
561 12
|
2月前
|
存储 算法 NoSQL
大数据-138 - ClickHouse 集群 表引擎详解3 - MergeTree 存储结构 数据标记 分区 索引 标记 压缩协同
大数据-138 - ClickHouse 集群 表引擎详解3 - MergeTree 存储结构 数据标记 分区 索引 标记 压缩协同
46 0
|
2月前
|
存储 消息中间件 分布式计算
大数据-137 - ClickHouse 集群 表引擎详解2 - MergeTree 存储结构 一级索引 跳数索引
大数据-137 - ClickHouse 集群 表引擎详解2 - MergeTree 存储结构 一级索引 跳数索引
46 0
|
2月前
|
存储 SQL 分布式计算
大数据-127 - Flink State 04篇 状态原理和原理剖析:状态存储 Part2
大数据-127 - Flink State 04篇 状态原理和原理剖析:状态存储 Part2
21 0