HBase 原理

embedded/2024/11/26 4:55:28/

一、HBase系统架构

HBase采用主从架构,主要由以下几个组件组成:

  1. Client:客户端,可以是HBase Shell、Java API客户端、Rest API等,提供访问接口,并维护对应的缓存以加速HBase的访问。客户端缓存Region的位置信息,以减少获取元数据的时间。
  2. Zookeeper:HBase通过Zookeeper来实现HMaster的高可用、HRegionServer的监控、元数据的入口以及集群配置的维护等工作。Zookeeper的选举机制保证集群中只有一个HMaster,同时监控HRegionServer的状态,并在HRegionServer异常时通过Master收到通知。
  3. HMaster:HMaster是所有HRegion Server的管理者,负责分配regions到每个HRegionServer,监控每个HRegionServer的状态,进行负载均衡和故障转移。
  4. HRegionServer:HRegionServer负责响应用户读写的IO请求,与底层HDFS交互,存储数据到HDFS,并处理分配给它的HRegion。它还负责刷新缓存到HDFS,维护HLog日志存储文件,处理来自客户端的读写请求,以及负责HRegion变大后的拆分和StoreFile的合并工作。
  5. HDFS:HDFS为HBase提供最终的底层数据存储服务,并提供高可用的支持。
    在这里插入图片描述

二、HBase数据存储与读取

  1. 数据存储:
  • HBase的数据存储在HDFS的文件中,数据按照表名进行组织存储。
  • 每个表被分割成多个Region,每个Region存储一部分数据。Region通过一定的规则和策略进行划分,以实现数据的均衡存储和查询效率的最大化。
  • Region内部由多个Store组成,每个Store对应表中的一个列族。Store由一个MemStore和零个或多个StoreFile(HFile)组成。MemStore负责保存内存中的数据,而StoreFile则是磁盘上保存原始数据的实际物理文件。
    1. 分布式存储:
      HBase利用Hadoop分布式文件系统(HDFS)作为底层存储,将数据分片并分布存储在多个节点上。这种分布式存储方式使得HBase能够处理PB级别的数据量,并提供了高容错性和可扩展性。
    2. 表与Region:
      在HBase中,数据被组织成表的形式,每个表由多个Region组成。Region是HBase中数据分布和负载均衡的基本单位,它包含了表中一部分行的数据。HBase会根据数据的量和访问模式动态地调整Region的数量和分布,以实现负载均衡和性能优化。
    3. 列族与Store:
      HBase中的表由多个列族组成,每个列族包含了表中具有相同访问模式的列。每个列族在物理上对应一个或多个Store,Store是HBase中数据存储的基本单元,它包含了列族中所有列的数据。
    4. MemStore与HFile:
      HBase使用内存中的MemStore来暂存写入的数据,以提高写入性能。当MemStore中的数据量达到一定阈值时,会触发Flush操作,将数据写入到磁盘上的HFile(Hadoop File)中。HFile是HBase中存储数据的物理文件,它采用了高效的压缩和编码技术,以减少磁盘IO和提高查询性能。
    5. WAL(Write-Ahead Logging):
      为了保证数据的可靠性和持久性,HBase在写入数据时采用了WAL机制。在数据写入MemStore之前,会先写入到WAL文件中。如果系统发生故障,可以通过WAL文件来恢复未写入到HFile中的数据。
  1. 数据读取:
  • HBase的数据读取采用分布式的方式。客户端将查询请求发送到HMaster节点,HMaster通过查询元数据信息,确定数据所在Region的位置,并将查询请求转发到对应的HRegionServer节点。
  • HRegionServer通过访问本地存储的数据,并将查询结果返回给客户端。在查询过程中,HRegionServer会首先查找内存(MemStore和BlockCache),如果未找到数据,则会到StoreFile上读取。为了提高读取效率,从StoreFile读取的数据会先写入BlockCache,再返回给客户端。
    1. 客户端缓存:
      HBase客户端会缓存Region的位置信息,以减少获取元数据的时间。当客户端需要读取数据时,会首先根据缓存的Region位置信息找到对应的HRegionServer。
    2. MemStore与BlockCache:
      当HRegionServer接收到读取请求时,会首先尝试从内存中的MemStore和BlockCache中读取数据。如果数据存在于MemStore或BlockCache中,则可以直接返回给客户端,无需访问磁盘。
    3. HFile读取:
      如果MemStore和BlockCache中未找到数据,HRegionServer会到HFile中读取数据。HFile采用了高效的索引和数据结构,使得读取操作能够快速定位到所需的数据。
    4. 数据合并与过滤:
      在读取数据时,HBase还支持数据的合并和过滤操作。例如,可以使用过滤器来只读取满足特定条件的行或列,以减少数据传输量并提高查询效率。
    5. 分布式读取:
      HBase支持分布式读取操作,即多个HRegionServer可以同时处理同一个查询请求。这种方式可以充分利用集群的计算能力,提高查询性能。

三、HBase数据更新与删除

  1. 数据更新:
  • HBase支持原子性的写入操作。所有的数据更新都是基于HLog(WAL)文件的。数据写入时会先写入到HLog文件中,以确保数据的持久化和可恢复性。
  • 数据写入HLog文件后,再写入到MemStore中。由于MemStore是内存中的数据,写入速度非常快,因此HBase能够提供高性能的写入能力。
  • 当MemStore中的数据达到一定的阈值时,会触发Flush操作,将MemStore中的数据写入到StoreFile中。这个过程是异步的,不会阻塞客户端的写入请求。
  1. 更新方式:
  • 可以通过put命令来更新数据,这实际上是向表中插入一条新的数据记录,如果记录的row key已经存在,则会覆盖原有记录。
  • 也可以使用update命令来覆盖写入数据,这种方式需要指定表名、row key、列名和值。
  1. 更新原理:
  • 客户端向HBase的主节点发送更新请求。
  • 主节点接收请求后,根据表的分区规则将请求转发给相应的Region Server。
  • 目标Region Server接收到请求后,在内存中查找要更新的数据。
    • 如果数据在内存中存在(即MemStore中),Region Server会直接更新内存中的数据,并将更新后的数据写入WAL(Write-Ahead Log)日志文件中以保证数据的持久性。
    • 如果数据在内存中不存在,Region Server会从HFile(HBase的底层数据存储文件)中检索数据,加载到内存中进行更新,并写入WAL日志文件。
  • 更新操作完成后,Region Server会将更新后的数据保留在MemStore中,等待后续的刷写操作。
  • 当MemStore中的数据达到一定大小时,Region Server会将数据刷写到磁盘上的HFile中。
  • 更新成功后,Region Server将响应返回给客户端。
  1. 数据删除:
  • HBase的数据删除采用标记删除的方式。即将要删除的数据标记为已删除,实际上并不从磁盘上删除。直到垃圾回收机制将其清理掉。
  1. 删除方式:
  • 可以使用delete命令来删除数据。如果只需要删除特定列的数据,可以在delete命令中指定列名。
  1. 删除原理:
  • HBase的删除操作不会立即将数据从磁盘上删除,而是通过插入一个keytype为Delete的KeyValue来标记数据已被删除。
  • 当执行删除操作时,HBase会新插入一条与要删除的数据相同的KeyValue数据,但keytype设置为Delete。
  • 删除标记会一直保留在StoreFile(HBase中存储数据的物理文件)中,直到发生Major Compaction操作时,数据才会被真正地从磁盘上删除,同时删除标记也会从StoreFile中删除。
  • 默认情况下,删除操作会标记所有版本的数据。因此,在执行Get或Scan操作时,不会看到已删除的单元格(行或列)。
  1. TTL(Time To Live)功能:
  • HBase允许为行或单元格设置存活时间(TTL),超出后数据会自动删除。
  • ColumnFamilies可以设置TTL长度(以秒为单位),HBase将在到期时间后自动删除行。这适用于行的所有版本,包括当前版本。
  • HBase还支持按每个单元格设置生存时间(TTL),Cell TTL以毫秒为单位表示,且不能超过ColumnFamily的TTL。

四、HBase数据访问控制

HBase通过访问控制列表(ACL)来控制用户对表和列族的访问权限。支持读、写和管理等多种操作,管理员可以授予或撤销用户的权限。

  1. 用户身份验证
  • HBase通过ZooKeeper或其他认证机制实现客户端的身份验证。
  • 客户端在访问HBase之前,需要向认证服务器提供身份信息,如用户名和密码。
  • 认证服务器验证客户端的身份信息后,会生成一个会话标识符,客户端使用该标识符与HBase通信。
  1. 授权机制
  • HBase通过访问控制列表(ACL)实现用户和角色的授权。
  • ACL可以设置在表、列族和列级别,以实现精细的权限控制。
  • 管理员可以创建角色,并为角色分配特定的权限,然后将角色分配给用户。
  • 用户根据所分配的角色或ACL规则,获得对HBase数据的访问权限。
  1. 数据加密
  • HBase支持多种数据加密方法,如AES、DES和RSA等。
  • 管理员可以配置HBase的加密策略,指定加密算法和密钥。
  • 客户端在写入数据时,通过加密策略将数据加密后存储在HBase中。
  • 客户端在读取数据时,通过加密策略解密数据。

http://www.ppmy.cn/embedded/140541.html

相关文章

【设计模式】【创建型模式(Creational Patterns)】之抽象工厂模式(Abstract Factory Pattern)

1. 设计模式原理说明 工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪一个类。工厂方法让类的实例化推迟到子类。这种模式的核心思想是将对象的创建过程封装起来,使得代码更加灵活和易于扩展。 优点: 符合开闭原则(对扩展开放,…

Ubuntu22.04配置强化学习环境及运行相关Demo

什么是强化学习 强化学习(Reinforcement Learning,简称 RL)是机器学习中的一个重要分支,属于一种基于试错机制的学习方法。它通过让智能体(Agent)与环境(Environment)进行交互&…

【jvm】为什么java是半编译半解释型语言

目录 1. 编译过程2. 解释过程3. 即时编译(JIT)过程4. 半编译半解释型语言的特点 1. 编译过程 1.Java源代码首先会被编译成字节码(Bytecode),这是一种与具体平台无关的中间代码。2.这一编译过程由Java编译器&#xff0…

RUST学习教程-安装教程

文章目录 参考文档安装教程更新卸载 参考文档 https://course.rs/first-try/installation.html 安装教程 Linux或者mac安装教程 curl --proto https --tlsv1.2 https://sh.rustup.rs -sSf | sh安装完成,当出现command not found的时候,需要source一下…

网络安全 - DOS

1.1.1 摘要 最近网络安全成了一个焦点,除了国内明文密码的安全事件,还有一件事是影响比较大的——Hash Collision DoS(通过Hash碰撞进行的拒绝式服务攻击),有恶意的人会通过这个安全漏洞让你的服务器运行巨慢无比&…

深入理解下oracle 11g block组成

深层次说,oracle数据库的最少组成单位应该是块,一般默认情况下,oracle数据库的块大小是8kb,其中存储着我们平常所需的数据。我们在使用过程中,难免会疑问道:“oracle数据块中到底是怎样组成的,平…

Dubbo Golang快速开发Rpc服务

开发 RPC Server & RPC Client 基于 Dubbo 定义的 Triple 协议,你可以轻松编写浏览器、gRPC 兼容的 RPC 服务,并让这些服务同时运行在 HTTP/1 和 HTTP/2 上。Dubbo Go SDK 支持使用 IDL 或编程语言特有的方式定义服务,并提供一套轻量的 …

java: spire.pdf.free 9.12.3 create pdf

可以用windows 系统中文字体,也可以从文件夹的字体文件 /*** encoding: utf-8* 版权所有 2024 ©涂聚文有限公司* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:* # Author : geovindu,Geovin Du 涂…