龙空技术网

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

小码匠科技 3746

前言:

当前朋友们对“mysql数据分析中用hbase的原因”大概比较注意,看官们都需要了解一些“mysql数据分析中用hbase的原因”的相关内容。那么小编也在网上收集了一些关于“mysql数据分析中用hbase的原因””的相关内容,希望朋友们能喜欢,咱们一起来学习一下吧!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。

1. 简介

HBase非常好地契合了大数据存储的特性。 首先是HBase具有突出的数据写入能力,在面对大数据的特性时,可以快速地把数据处理消化。 另外HBase具有超强弹性升缩能力,在面对大数据的体量的时候,能够无限水平扩展来存储数据。 同时,HBase具有强大的业务适应能力,适应业务的变化多端,从而能够满足大数据的特点。 最后,HBase具有高效的多维删除能力,来满足大数据真实性、脏数据的特点,能够帮助用户快速处理脏数据和过期 数据。 简而言之,HBase是一个为大数据而生的数据库。

2. 大数据与HBase2.1. 数据库的发展

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

数据库诞生于二十世纪的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等,本文聚焦大数据时代,下面来看一下大数据发展的趋势。

2.2. 数据趋势

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

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

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

2.3. 大数据的特点

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

大容量

体量大,增长快水平扩展成为基本需求

半结构化

丰富的数据类型列具有发散性

高速度

高速读写往往会遇到IO瓶颈

真实性

脏数据成为常态数据质量挑战大 从上面四个特点可以看出,传统RDBMS已经无法满足大数据需求。2.4. Google的三驾马车

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

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

GFS(Google File System)

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

分布式文件系统Master+ChunkServer追加模型

MapReduce

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

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

BigTable

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

分布式表格系统Master+多TableServerSchema Free2.5. BigTable和HBase

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

2.6. HBase的历史

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

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

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

2.7. Apache HBase项目现状HBase仍然是Apache社区最活跃的项目之一。有众多来自中国的Committer/PMC。张铎目前为Apache HBase社区主席。3. HBase的架构与原理3.1. HBase基本概念

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

数据模型

1) Schema Free2) 无数据类型3) 大宽表4) 行存储,列模型

系统架构

1)原生分布式架构2)自动分区3)专为海量数据设计

读写能力

1)高吞吐,低延迟2)支持随机/范围查询3)适用在线/离线场景

特色功能

1)TTL2)多版本3)离线导入4)Coprocessor5)......3.2. HBase数据模型

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

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

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

3.3. HBase架构

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

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

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

1> 分布式设计

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> 数据分片

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

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

3> 存储计算分离

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

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

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

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

3.4. HBase读写原理

1> 请求路由

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

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

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

2> LSM-Tree

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

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

3> 读流程

上图为HBase的读流程。

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

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

3.5. HBase特色功能

1> TTL

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

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

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

特性介绍

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

使用场景

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

2>多版本

特性介绍

1)当数据更新后,之前旧版本仍然可以被访问;2)旧版本的数量可以设定至多达上百万;3)系统自动删除多余的旧版本。

使用场景

1)适用于需要维护最近N次变更值的数据,如浏览记录、轨迹记录、登录记录、交易记录等;2)常用于实时推荐、安全风控、营销圈人等场景。

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

3> Bulkload

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

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

4> Coprocessor

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

EndPoint

1)分布式计算2)算子下推

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

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

Observer

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

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

4. HBase使用场景4.1. HBase的生态

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

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

4.2. HBase的场景

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

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

4.3. 使用HBase的公司

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

总结

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

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

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

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

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

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

标签: #mysql数据分析中用hbase的原因 #hbase用什么语言开发 #hbase 语言