大数据云计算——Hbase组件

HBase 是一种分布式、可扩展、支持海量数据存储的 NoSQL 数据库。逻辑上, HBase 的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列。但从 HBase 的底层物理存储结构(K-V)来看,HBase更像是一个multi-dimensional map。

7.1Hbase的逻辑结构

7.2Hbase的基本架构

架构角色:

1) Region Server

Region Server 为 Region 的管理者, 其实现类为 HRegionServer,主要作用如下:

对于数据的操作: get, put, delete;

对于 Region 的操作: splitRegion、 compactRegion。

2) Master

Master 是所有 Region Server 的管理者,其实现类为 HMaster,主要作用如下:

对于表的操作: create, delete, alter

对于 RegionServer的操作:分配 regions到每个RegionServer,监控每个 RegionServer

的状态,负载均衡和故障转移。

3) Zookeeper

HBase 通过 Zookeeper 来做 Master 的高可用、 RegionServer 的监控、元数据的入口以及

集群配置的维护等工作。

4) HDFS

HDFS 为 HBase 提供最终的底层数据存储服务,同时为 HBase 提供高可用的支持。

1) StoreFile

保存实际数据的物理文件, StoreFile 以 HFile 的形式存储在 HDFS 上。每个 Store 会有

一个或多个 StoreFile(HFile),数据在每个 StoreFile 中都是有序的。

2) MemStore

写缓存,由于 HFile 中的数据要求是有序的,所以数据是先存储在 MemStore 中,排好序后,等到达刷写时机才会刷写到 HFile,每次刷写都会形成一个新的 HFile

3) WAL

由于数据要经 MemStore 排序后才能刷写到 HFile, 但把数据保存在内存中会有很高的概率导致数据丢失,为了解决这个问题,数据会先写在一个叫做 Write-Ahead logfile 的文件中,然后再写入 MemStore 中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。

7.3Hbase的读写流程

读流程

1) Client 先访问 zookeeper,获取 hbase:meta 表位于哪个 Region Server。

2)访问对应的 Region Server,获取 hbase:meta 表,根据读请求的 namespace:table/rowkey,

查询出目标数据位于哪个 Region Server 中的哪个 Region 中。并将该 table 的 region 信息以及 meta 表的位置信息缓存在客户端的 meta cache,方便下次访问。

3)与目标 Region Server 进行通讯;

4) 分别在 Block Cache(读缓存), MemStore 和 Store File(HFile)中查询目标数据,并将查到的所有数据进行合并。此处所有数据是指同一条数据的不同版本(time stamp)或者不同的类型(Put/Delete)。

5) 将从文件中查询到的数据块(Block, HFile 数据存储单元,默认大小为 64KB)缓存到

Block Cache。

6) 将合并后的最终结果返回给客户端。

写流程:

1) Client 先访问 zookeeper,获取 hbase:meta 表位于哪个 Region Server。

2)访问对应的 Region Server,获取 hbase:meta 表,根据读请求的 namespace:table/rowkey,

查询出目标数据位于哪个 Region Server 中的哪个 Region 中。并将该 table 的 region 信息以及 meta 表的位置信息缓存在客户端的 meta cache,方便下次访问。

3)与目标 Region Server 进行通讯;

4)将数据顺序写入(追加)到 WAL;

5)将数据写入对应的 MemStore,数据会在 MemStore 进行排序;

6)向客户端发送 ack;

7) 等达到 MemStore 的刷写时机后,将数据刷写到 HFile。

7.4Hbase与Hive的对比

HBase 与 Hive 的对比

1. Hive

(1) 数据仓库

Hive 的本质其实就相当于将 HDFS 中已经存储的文件在 Mysql 中做了一个双射关系,以

方便使用 HQL 去管理查询。

(2) 用于数据分析、清洗

Hive 适用于离线的数据分析和清洗,延迟较高。

(3) 基于 HDFS、 MapReduce

Hive存储的数据依旧在 DataNode 上,编写的HQL语句终将是转换为 MapReduce代码执行。

2. HBase

(1) 数据库

是一种面向列族存储的非关系型数据库。

(2) 用于存储结构化和非结构化的数据

适用于单表非关系型数据的存储,不适合做关联查询,类似 JOIN 等操作。

(3) 基于 HDFS

数据持久化存储的体现形式是 HFile存放于 DataNode中,被ResionServer以 region 的形式进行管理。

(4) 延迟较低,接入在线业务使用

面对大量的企业数据, HBase 可以直线单表大量数据的存储,同时提供了高效的数据访问速度

7.5Hbase的优化

高可用

在 HBase 中 HMaster 负责监控 HRegionServer 的生命周期,均衡 RegionServer 的负载,

如果 HMaster 挂掉了,那么整个 HBase 集群将陷入不健康的状态,并且此时的工作状态并

不会维持太久。所以 HBase 支持对 HMaster 的高可用配置

预分区

每一个 region 维护着 StartRow 与 EndRow,如果加入的数据符合某个 Region 维护的

RowKey 范围,则该数据交给这个 Region 维护。那么依照这个原则,我们可以将数据所要

投放的分区提前大致的规划好,以提高 HBase 性能

RowKey 设计

一条数据的唯一标识就是 RowKey,那么这条数据存储于哪个分区,取决于 RowKey 处于哪个一个预分区的区间内,设计 RowKey 的主要目的 ,就是让数据均匀的分布于所有的region 中,在一定程度上防止数据倾斜。接下来我们就谈一谈 RowKey 常用的设计方案。

内存优化

HBase 操作过程中需要大量的内存开销,毕竟 Table 是可以缓存在内存中的,一般会分配整个可用内存的 70%给 HBase 的 Java 堆。但是不建议分配非常大的堆内存,因为 GC 过程持续太久会导致 RegionServer 处于长期不可用状态,一般 16~48G 内存就可以了,如果因为框架占用内存过高导致系统内存不足,框架一样会被系统服务拖死。

 

 

 

猜你喜欢

转载自blog.csdn.net/weixin_41605937/article/details/106813079