首页 > 其他分享 >高性能存储架构---HBase

高性能存储架构---HBase

时间:2023-02-26 23:01:08浏览次数:21  
标签:存储 架构 Region Server --- StoreFile HBase 数据

关系型数据库的瓶颈

  • 海量数据的高效率读写

网站每天产生的数据量是巨大的,对于关系型数据库来说, 需要进行主从复制、分库分表、垂直/水平拆分等处理来支持海量数据的存储与查询,势必会造成一些问题:放弃join、聚合函数,不定时扩容、数据迁移,B+树过大、过深,老数据访问较少,B+树上层缓存的部分信息无用。

  • 高并发读写需求

网站的用户并发性非常高,往往达到每秒上万次读写请求,对于传统关系型数据库来说,需要维护B+树结构,硬盘I/O是一个很大的瓶颈。

  • 高扩展性和可用性

在基于web的结构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移。 

  • 模式固定,存储结构化数据

      关系数据库的另一个特点就是其具有固定的表结构,因此,其扩展性极差,对于系统的升级,功能的增加,往往意味着数据结构巨大变动,这一点关系型数据库也难以应付,需要新的结构化数据存储 

HBase产生背景

上面提到,随着数据规模越来越大,大量业务场景开始考虑数据存储的水平扩展,海量数据量存储成为提升应用性能的瓶颈,另外数据结构更加复杂,固定的表结构不在适应海量的数据结构。

相对于mysql的瓶颈,Hbase有如下的特点

  • 模式自由:不像传统的关系型数据库需要定义数据库、数据表等结构才可以存取数据,数据表中的每一条记录都可能有不同的属性和格式;
  • 逆范式:去除约束,降低事务要求,更利于数据的分布式存储,与MySQL范式相反;
  • 多分区存储:存储在多个节点上,很好地进行水平扩展,提高数据的读、写性能;
  • 多副本异步复制:为了保证数据的安全性,会保存数据的多个副本;
  • 弹性可扩展:可以在系统运行过程中动态的增删节点,数据自动平衡移动,不需要人工的干预操作;
  • 软事务:事务是关系型数据库的一个特点,NoSQL数据库不能完全满足事务的ACID特性,但是能保证事务的最终一致性;

HBASE是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。其主要作用是通过分布式的集群系统进行海量数据的存储与处理。其主要的优点有:

  1. 线性扩展,随着数据量增多可以通过节点扩展进行支撑
  2. 数据存在hdfs上面,备份机制健全
  3. 通过zookeeper协调查找数据,读取速度快。
  4. 良好的数据备份与恢复机制,数据安全性由保障。

HBase的数据模型

高性能存储架构---HBase_关系型数据库

HBase是一个稀疏、多维度、排序的映射表,这张表的索引是行键、列族、列限定符和时间戳每个值是一个未经解释的字符串。

表(Table):一个HBase表由行和列组成,列划分为若干个 列族。

行(Row):在表里面,每一行代表着一个数据对象,每一行都是以一个行键(Row Key)来进行唯一标识,行键可以是任意字符串,在HBase内部,行键保存为字符数组,数据存储时,按照行键的字典序排列。

列族(Column Family):列族支持动态扩展,可以很轻松地添加一个列族或列,无需预先定义列的数量以及类型,所有列均以字符串形式存储,用户需要自行进行数据类型地转换。一个HBase表被分组成为许多“列族”的集合,它是基本的访问控制单元。

列标识(Column Qualifier):列族中的数据通过列标识符来进行定位,列标识也没有特定的数据类型,以二进制字节来存储。

时间戳(Timestap):默认每一个单元中的数据插入时都会用时间戳来进行版本标识。读取单元数据时,如果时间戳没有被指定,则默认返回最新你的数据,写入新的单元格数据时,如果没有设置时间戳,默认用当前时间。

单元格(Cell):每一个行键,列族和列标识符共同确定一个单元,存储在单元里的数据称为单元数据。

HBase的架构设计

高性能存储架构---HBase_Server_02

HMaster

HMaster 是 HBase 集群的主节点,负责整个集群的管理工作,主要工作职责如下:

  • 分配Region:负责启动的时候分配Region到具体的 RegionServer;
  • 负载均衡:一方面负责将用户的数据均衡地分布在各个 Region Server 上,防止Region Server数据倾斜过载。另一方面负责将用户的请求均衡地分布在各个 Region Server 上,防止Region Server 请求过热;
  • 维护数据:发现失效的 Region,并将失效的 Region 分配到正常的 RegionServer 上,并且在Region Sever 失效的时候,协调对应的HLog进行任务的拆分。

如果master节点不可用,大部分情况下是不会耽误数据的读写,因为读写的入口是zookeeper,直到region的大小达到了split的阈值或者其他相关的元数据或者集群状态管理操作触发的时候

ZooKeeper

HBase 通过 ZooKeeper 来完成选举 HMaster、监控 Region Server、维护元数据集群配置等工作,主要工作职责如下:

  • 选举HMaster:通ooKeeper来保证集中有1HMaster在运行,如果 HMaster 异常,则会通过选举机制产生新的 HMaster 来提供服务;
  • 监控Region Server: 通过 ZooKeeper 来监控 Region Server 的状态,当Region Server 有异常的时候,通过回调的形式通知 HMaster 有关Region Server 上下线的信息;
  • 维护元数据和集群配置:通过zooKeeper存储信息并对外提供访问接口。

HDFS

HDFS 为 HBase 提供底层数据存储服务,同时为 HBase提供高可用的支持, HBase 将 HLog 存储在 HDFS 上,当服务器发生异常宕机时,可以重放 HLog 来恢复数据。

Region Server

Region Server 直接对接用户的读写请求,是真正的干活的节点,主要工作职责如下。

  • 管理 HMaster 为其分配的 Region;
  • 负责与底层的 HDFS 交互,存储数据到 HDFS;
  • 负责 Region 变大以后的拆分以及 StoreFile 的合并工作

Region:每一个 Region 都有起始 RowKey 和结束 RowKey,代表了存储的Row的范围,保存着表中某段连续的数据。一开始每个表都只有一个 Region,随着数据量不断增加,当 Region 大小达到一个阀值时,Region 就会被 Regio Server 水平切分成两个新的 Region。当 Region 很多时,HMaster 会将 Region 保存到其他 Region Server 上。

Store:一个 Region 由多个 Store 组成,每个 Store 都对应一个 Column Family, Store 包含 MemStore 和 StoreFile。

  • MemStore:作为HBase的内存数据存储,数据的写操作会先写到 MemStore 中,当MemStore 中的数据增长到一个阈值(默认64M)后,Region Server 会启动 flasheatch 进程将 MemStore 中的数据写人 StoreFile 持久化存储,每次写入后都形成一个单独的 StoreFile。当客户端检索数据时,先在 MemStore中查找,如果MemStore 中不存在,则会在 StoreFile 中继续查找。
  • StoreFile:MemStore 内存中的数据写到文件后就是StoreFile,StoreFile底层是以 HFile 的格式保存。HBase以Store的大小来判断是否需要切分Region。

当一个Region 中所有 StoreFile 的大小和数量都增长到超过一个阈值时,HMaster 会把当前Region分割为两个,并分配到其他 Region Server 上,实现负载均衡。

  • HFile:HFile 和 StoreFile 是同一个文件,只不过站在 HDFS 的角度称这个文件为HFile,站在HBase的角度就称这个文件为StoreFile。
  • HLog:负责记录着数据的操作日志,当HBase出现故障时可以进行日志重放、故障恢复。例如,磁盘掉电导致 MemStore中的数据没有持久化存储到 StoreFile,这时就可以通过HLog日志重放来恢复数据

读流程

高性能存储架构---HBase_关系型数据库_03

  1. Client先访问zookeeper,从meta表读取region的位置,然后读取meta表中的数据。meta中又存储了用户表的region信息;
  2. 根据namespace、表名和rowkey在meta表中找到对应的region信息;
  3. 找到这个region对应的regionserver;
  4. 查找对应的region;
  5. 先从MemStore找数据,如果没有,再到BlockCache里面读;
  6. BlockCache还没有,再到StoreFile上读(为了读取的效率);
  7. 如果是从StoreFile里面读取的数据,不是直接返回给客户端,而是先写入BlockCache,再返回给客户端

写流程

高性能存储架构---HBase_Server_04

高性能存储架构---HBase_数据_05

LSM


标签:存储,架构,Region,Server,---,StoreFile,HBase,数据
From: https://blog.51cto.com/u_15736848/6087008

相关文章

  • 1-5 数据包交换原则
    数据包交换原则这一集的字幕不知道怎么回事,感觉像在抽风一样。交换机一些细节数据包的交换并不需要每一个流的状态,每个包都已经把这个信息包含在内了。不是每一个数......
  • JavaSE5️⃣核心类 - 枚举(enum)
    1、枚举1.1、含义维基百科在数学和计算机科学理论中,一个集的枚举是指:列出有穷序列集的所有成员的程序。一种特定类型对象的计数。这两种类型经常重叠,是一个被命......
  • zxk-logs_springboot集成redis
    pom.xml:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><gro......
  • C语言进阶--循环语句
    循环语句的基本工作方式-通过条件表达式判定是否执行循环体-条件表达式遵循if语句表达式的原则do、while、for的区别-do语句先执行后判断,循环体至少执行一......
  • Linux-反弹Shell
    /bin/bash-i>&/dev/tcp/10.0.0.1/80800>&1/bin/sh-i>&/dev/tcp/10.0.0.1/80800>&1perl-e'useSocket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,......
  • stm32笔记[5]-FreeRTOS及(软IIC)读写AT24C02
    STM32CubeIDE使用FreeRTOS教程资料FreeRTOS从入门到精通1--实时操作系统的前世今生FreeRTOS从入门到精通2--人生若只如初见,初识STM32CubeIDEFreeRTOS从入门到精通3--......
  • 量化交易基础 - 10 - 拟合
    10-拟合然而,在判定量化策略的优度时,仍有一个极其重要的指导原则,这就是过度拟合。模型的过度拟合本质上意味着研究员使用过多的数据。最经典的定义是研究员建立了一个能......
  • C语言进阶--变量属性
    C语言中的变量可以有自己的属性在定义变量的时候可以加上“属性”关键字“属性”关键字指明变量的特有意义语法:propertytypevar_name; auto即C语言中局部变量的默......
  • 1-4 数据包的一生
    数据包的一生TCPtcp的三次握手,这个在本科的网络课上就有实际学过。第一次握手客户端检测到同步消息第二次握手服务器确认客户端同步第三次握手确认建立连接TCP......
  • 考研周记-week1
    2.20~2.26本周考研开始的第一周,准备从本次开始记录考研的每一个周学的知识和记录每周发生的事英语每天早上起来吃完饭之后,就开始背单词,每天背60个单词,还有复习的单词,平......