HBase_HBase架构解析_基于Hbase2.0

2024-05-03 05:58
文章标签 解析 架构 hbase hbase2.0

本文主要是介绍HBase_HBase架构解析_基于Hbase2.0,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考文章 : 

HBase(2.2)-HBase架构详解_不务正业的土豆的博客-CSDN博客

Hbase中的各个组件介绍_hbase的分布式架构中有哪些组件_疯狂哈丘的博客-CSDN博客

文章目录

    • 一、Hbase中的4大组件
      • 1、hbase-client
      • 2、Zookeeper
      • 3、HMaster
      • 4、HRegionServer
    • 二、Hbase 组件的HA保证
      • 1、zk的HA保证
      • 2、HMaster的HA保证
      • 3、HRegionServer的HA保证


HBase架构组成

HBase 采用 Master / Slave 架构搭建集群,它隶属于 Hadoop 生态系统,由以下几个类型的节点组成

  • Hbase-client
  • HMaster节点
  • HRegionServer节点
  • ZooKeeper集群

而在底层,它将数据存储于HDFS中,因而涉及到HDFS的NameNode、DataNode等。Hbase中主要有3个组件,客户端库(Shell,JavaAPI),一台主服务器(Master),多台Region服务器。总体结构如下:

1、hbase-client

客户端,用来访问hbase集群。可以和Hbase交互,也可以和HRegionServer交互。都是通过hbase rpc来访问对应的接口。

这里的客户端模式有多种,可以是Thrift、Avro、Rest等。

另外,hbase-client自身会缓存region的一些信息。
 

2、HMaster组成

主服务器 (Master)HMaster 利用 Zookeeper 为 Region 服务器分配Region。 Master 负责侦测各个 RegionServer 之间的状态, 并平衡 RegionServer 之间的负载,不提供任何服

HBaseMaster 还有一个职责就是负责分配 Region 给 RegionServer。HBase 允许多个 Master 节点 共存,但是这需要 Zookeeper 的帮助。

 不过当多个Master节点共存时,只有一个Master 是提供服务的,其他的 Master 节点处于待命的状态。当正在工作的 Master 节点宕机时,其他的 Master 则会接管 HBase 的集群。

作用总结:

1)协调HRegionServer

为 RegionServer 分配 region , 启动时 HRegion的分配,以及负载均衡和修复时HRegion的重新分配,在 HRegion split 时分配新的 HRegion。 在HRgionServer 退出时迁移其内的 HRegion到其他 HRegionServer 上。监控集群中所有 HRegionServer 的状态,(通过 Heartbeat 和 监听 Zookeeper 中的状态),实现其负载均衡。

  • 管理RegionServer的负载均衡,调整Region的分布
  • 在RegionServer宕机或下线后,负责迁移RegionServer上的Region到其他的RegionServer上
  • Region在分裂后,负责分配新的Region

2) Admin 职能

创建,删除,修改 Table的定义,即实现 DDL 操作

namespace 和 table 的增删改, column  family 的增删改等。

管理namespace 和 table 的元数据 (实际存储在 HDFS 上 )。 

权限控制 (ACL)

  • 用户对表的增删改查

-----------------------------------

3、HRegionServer节点

HRegionServer一般和 DataNode 在同一台机器上运行,实现数据的本地性。 HRegionServer 包含多个 HRgion,由 WAL(HLog), BlockCache, MemStore, HFile 组成。

1) WAL 即Write Ahead Log

HBase 中的 HLog 机制是 WAL 的一种实现(底层 SequenceFile),而 WAL (一般翻译为预写日志) 是事务机制中常见的一致性的实现方式。每个 RegionServer 中都会有一个 HLog 的实例。

RegionServer 会将更新操作(如 Put, Delete) 先记录到 WAL (也就是 HLog) 中,然后将其写入到 Store 的 MemStore ,最终 MemStore 会将数据写入到持久化的 HFile (MemStore 到达配置的内存阈值)。这样就保证了 HBase的写的可靠性。 如果没有WAL, 当 RegionServer 宕掉的时候, MemStore 还没有写入到 HFile, 或者 StoreFile 还没有保存,数据就会丢失。或许有的读者会担心HFile 本身会不会丢失,这是由 HDFS 来保证的。在 HDFS 中的数据默认会有 3份。因此这里并不考虑 HFile 本身的可靠性。

HFile 由很多个数据块 (Block )组成,并且有一个固定的结尾块。其中的数据块是由一个 Header 和 多个 Key-Value的键值对组成。在结尾的数据块中包含了数据相关的索引信息,系统也是通过结尾的索引信息找到 HFile 中的数据。

2)BlockCache

是一个读缓存,即 “引用局部性” 原理( 也应用于 CPU , 分空间局部性 和 时间局部性 ,空间局部性是指 CPU 在某一个时刻需要某个数据, 那么有很大的概率在 下一时刻,它需要的数据在其附近  。 时间局部性是指某个数据在被访问一次后,它有很大的概率在不久的将来会被再次的访问。 将数据预读取到内存中,以提升读的性能。

HBase 中提供两种 BlockCache 的实现,默认 on-heap LRUBlockCache 和 BucketCache (通常是 Off-heap)。通常 BucketCache 的性能 要差于 LRUBlockCache, 然而由于GC的影响,LRUBlockCache的延迟会变得不稳定,而BucketCache 由于是自己管理 BlockCache, 而不需要GC,  因而它的延迟通常比较稳定,这也是有些时候需要选用 BucketCache 的原因。

3)HRegion

一个Table可以有多个Region, 他们可以在一个相同的  HRegionServer 上,也可以分布在不同的 HRegionServer 上,一个 HRegionServer 可以有多个 HRegion, 他们分别属于不同的 Table。

HRegion 由多个 Store( HStore) 构成,

每个 HStore 对应了一个 Table 在这个HRegion 中的一个 Column Family, 即每个 Column Family 就是一个集中的存储单元,因而最好将具有相近 I/O 特性的 Column 存储在 Column Family,  以实现高效读取 (数据局部性原理,可以提高缓存的命中率 )。HStore 是 HBase 中存储的核心,它实现了读写 HDFS 功能,一个 HStore 由 一个MemStore 和 0个或者多个 StoreFile 组成。

HBase 使用 RowKey 将表水平切割成多个 HRegion, 从 HMaster 的角度,每个 HRegion 都记录了它的 StartKey 和 EndKey (第一个 HRegion 的 StartKey 为空, 最后一个 HRegion 的 EndKey为空 ),由于 RowKey 是排序的(按字典顺序 从小到大排序),因而 Client 可以通过 HMaster 快速的定位每个 RowKey 在那个 HRegion 中。HRegion 由 HMaster 分配到相应的 HRegionServer 中,然后由 HRegionServer 负责 HRegion 的启动和管理,和 Client 的通信,负责数据的读 (使用 HDFS)。每个 HRegionServer 可以同时管理 1000个左右的 HRegion 。

4)MemStore

一个写缓存(In Memory Sorted Buffer ),所有数据的在 完成 WAL 日志写后,后写入MemStore 中,由 MemStore 根据一定的算法将数据 Flush到 底层 HDFS 文件中 (HFile),  通常每个HRegion中的每个 Column Family 都有一个自己的 MemStore.

5) HFile (StoreFile)

用于存储HBase的数据(Cell / Key/ Value )。在 HFile 中的数据是按 RowKey, Column Family, Column 排序,对相同的 Cell(即这三个值都一样 ),则按 timestamp 倒序排列。

HRegionServer宕机恢复

  1. HMaster通过zk检测到有HRegionServer下线,开始处理它遗留的WAL文件
  2. 将该WAL文件中不同Region的数据进行拆分,然后放到对应的Region的目录下
  3. 接着HMaster开始将这些失效的Region进行分配,也就是各个在线的HRegionServer都可能领到这些Region
  4. HRegionServer实例分配到Region后,发现对应的Region目录下有WAL文件需要处理,就会读取这些数据进行回放,数据也就重新加载到MemStore中去了

HRegionServer 功能总结

  • 维护Master 分配给它的 Region, 处理对这些 region 的 I/O 请求
  • 负责切分在运行过程中变得过大的 region
  • 读写 HDFS, 管理Table 中的数据。
  • Client 直接通过 HRegionServer 独写数据 (从 HMaster 中获取元数据,找到RowKey 所在的 HRegion / HRegionServer 后)。

-----------------------------------------------------------

4、Zookeeper集群

Zookeeper 为 HBase 集群提供协调服务,它管理着HMaster和HRegionServer的状态(available/alive等),并且会在它们宕机时通知给HMaster,从而HMaster可以实现HMaster之间的failover(故障转移),或对宕机的HRegionServer中的HRegion集合的修复(将它们分配给其他的HRegionServer)。ZooKeeper集群本身使用一致性协议(PAXOS协议)保证每个节点状态的一致性。

总结:
 

  • HMaster的HA,哪个HMaster先抢到zk上的锁,哪个就是active
  • 存储-ROOT-表的地址,HMaster的地址
  • 存储所有HRegionServer的状态,监控HRegionServer的上下线
  • 存储Hbase的一些schema和table的元数据

---------------------------------------------------------

Hbase 组件的HA保证

(1) Master容错:

   Zookeeper重新选择一个新的Master。如果无Master过程中,数据读取仍照常进行,但是,region切分、负载均衡等无法进行;

    HMaster一般采用一主多备的方式来保证HA。HMaster在启动后通过尝试创建zk节点来成为Active,其他没有创建成果的则成为standby。如果active节点的HMaster因为一些原因挂掉了,standby的HMaster实例就可以迅速成为新的active然后开始工作。

    HMaster的HA依赖于zk,因此只要zk能正常提供服务,HMaster只要部署2台即可保证高可用。

(2) RegionServer容错:

    定时向Zookeeper汇报心跳,如果一旦时间内未出现心跳,Master将该RegionServer上的Region重新分配到其他RegionServer上,失效服务器上“预写”日志由主服务器进行分割并派送给新的RegionServer;

    HRegionServer只是一个工作节点,负责一部分的Region,因此只要不是所有的HRegionServer全挂了,都不会对hbase有什么影响。

    HRegionServer下线后,HMaster会将它负责的那些Region分发给其他的HRegionServer来管理。

(3) Zookeeper容错:

   Zookeeper是一个可靠地服务,一般配置3或5个Zookeeper实例。

   作为一个分布式协调系统,zk本身就有做HA。只要有足够的zk实例在运行,zk就可以正常的提供服务。

zk一般建议部署单数台的实例,这主要和他的选举机制有关。zk在读数据的时候可以去任何一台节点读取数据,但是在写数据时需要把请求转发给leader节点进行处理,如果无法选出leader节点的话,zk集群是无法正常工作的。leader的选举规则是某个节点必须获得超过一半的选票才可以成为leader,所以如果挂掉n/2台,选举无法进行,zk集群就无法提供服务了。举几个例子:

  • 假设有2台zk节点,挂掉了一台后,只剩下一台zk节点,这时候只能获取到一个投票,没有超过1/2,所以剩下的那台zk节点也无法成为leader,集群无法提供服务(此时容忍度是可以挂掉0台)
  • 假设有3台zk节点,挂掉了一台后,只剩下2台zk节点,这时候可以获取到2个投票,占2/3,超过了1/2,所以zk可以选出leader,是可以正常工作的(此时容忍度是可以挂掉1台)
  • 假设有4台zk节点,挂掉两台后,只剩下两台zk节点,这时候只能获取到两个投票,没有超过1/2,所以剩下的那台zk节点也无法成为leader,集群无法提供服务(此时容忍度是可以挂掉1台)

从上面3个例子可以看出,1台zk节点和2台zk节点的容忍度都是0台,3台zk节点和4台zk节点的容忍度都是1台。可以推出2n-1和2n的效果是一样的,没必要花更多的资源去部署多余的zk节点。因此普遍建议部署奇数台zk节点即可。

hbase有许多地方都依赖于zk,如果zk无法正常工作,会严重影响hbase的运行。因此建议zk至少部署3个实例。
 

这篇关于HBase_HBase架构解析_基于Hbase2.0的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/955974

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

OWASP十大安全漏洞解析

OWASP(开放式Web应用程序安全项目)发布的“十大安全漏洞”列表是Web应用程序安全领域的权威指南,它总结了Web应用程序中最常见、最危险的安全隐患。以下是对OWASP十大安全漏洞的详细解析: 1. 注入漏洞(Injection) 描述:攻击者通过在应用程序的输入数据中插入恶意代码,从而控制应用程序的行为。常见的注入类型包括SQL注入、OS命令注入、LDAP注入等。 影响:可能导致数据泄

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

多线程解析报表

假如有这样一个需求,当我们需要解析一个Excel里多个sheet的数据时,可以考虑使用多线程,每个线程解析一个sheet里的数据,等到所有的sheet都解析完之后,程序需要提示解析完成。 Way1 join import java.time.LocalTime;public class Main {public static void main(String[] args) thro