Hbase_架构与运行机制

  1. HBase的组件和功能

    ·Zookeeper

    用来选举集群主节点,以便跟踪可用的在线服务器,同时维护集群的元数据。
    Zookeeper以树形维护Zookeeper数据znode,它有两种形式:
    ①临时节点,适合应用程序检验某个分布式系统资源是否可用
    ②持久节点,保存了应用程序的一些数据

    ·HMaster
    管理运行在不同服务器上的RegionServer,也为客户端操作HBase的所有元数据提供接口,同时负责RegionServer的故障处理和region的切分。在HBase集群中可以有多个HMaster,实现集群的高可用
    HMaster功能:
    ① 监控RegionServer
    ② 处理RegionServer故障转移
    ③ 处理元数据变更
    ④ region的分配或移除
    ⑤ 所有元数据变更接口
    ⑥ 在空闲时间进行数据均衡
    ⑦ 通过Zookeeper发布自己的位置给客户端
    ⑧ HMaster Web界面提供HBase集群的所有信息(table、region、RegionServer等)
    如果Master节点宕机,由于客户端是直接跟RegionServer交互的,整个集群会继续正常工作。HBase的目录表(.META.和.ROOT.)是作为HBase表存在的,它们不是存储在master的内存中。但master会执行一些关键功能,如RegionServer的故障转移、region切分等,因此master节点需要尽可能快的恢复

    ·RegionServer
    RegionServer负责存储HBase的实际数据,其工作包括:
    ① 处理分配给它的region(或者表)
    ② 处理客户端读写请求
    ③ 刷新缓存到HDFS中
    ④ 维护HLog:HLogs保存了所有的修改日志,它存储在HStore文件中,也就是WAL
    ⑤ 执行压缩
    ⑥ 负责处理region分片
    这里写图片描述
    RegionServer组件介绍:
    ① Write-Ahead logs:修改记录。数据会先写在这个文件,然后写入内存。系统出现故障时便于重建
    ② MemStore:内存数据存储,用来保存当前的数据操作。当数据保存在WAL的时候,RegionServer会在内存中存储键值对
    ③ HFile:在磁盘上保持原始数据的实际的物理文件,内部由HFile块组成,块是HFile的组成单元
    ④ Store:HFile存储于此,一个Store对应HBase表的一个列族。Block是Store文件的基本存储块
    ⑤ Region:HBase表的分片,表会根据不同的键值被切分为不同的region存储在RegionServer中,一个RegionServer可以有多个不同的region
    这里写图片描述

    ·Client

    ·目录表(Catalog tables):

    ·-ROOT-:存储了.META.表的位置信息

    ·-META.:存储了所有region信息和它们的位置

  2. HBase的内部存储架构

    HBase使用LSM树存储文件,LSM树把数据存储分为两个独立的部分,并对底层存储进行优化。一部分是当前使用的,比较小,存在内存中;另一个比较大,持久化在磁盘中。当内存中的数据不断增大并超过一个阈值时,它会在磁盘中的大的结构体中进行合并,使用的是一种有序的合并算法。同时,一个新的在内存中的结构体树被创建,以便实现新的插入需求。这把随机数据访问转化为了顺序数据访问,提高了数据读的性能,并且数据是在后台进行的,不影响前端进程。

    ① 哈希存储引擎 是哈希表的持久化实现,支持增、删、改以及随机读取操作,但不支持顺序扫描,对应的存储系统为key-value存储系统(Reids)。对于key-value的插入以及查询,哈希表的复杂度都是O(1),明显比树的操作O(n)快
    ② B树存储引擎是B树的持久化实现,不仅支持单条记录的增、删、读、改操作,还支持顺序扫描(B+树的叶子节点之间的指针),对应的存储系统就是关系数据库(Mysql等)。
    ③ LSM树(Log-Structured Merge Tree)存储引擎和B树存储引擎一样,同样支持增、删、读、改、顺序扫描操作。而且通过批量存储技术规避磁盘随机写入问题。当然凡事有利有弊,LSM树和B+树相比,LSM树牺牲了部分读性能,用来大幅提高写性能。

    LSM树的设计思想:将对数据的修改增量保持在内存中,达到指定的大小限制后将这些修改操作批量写入磁盘,不过读取的时候稍微麻烦,需要合并磁盘中历史数据和内存中最近修改操作,所以写入性能大大提升,读取时可能需要先看是否命中内存,否则需要访问较多的磁盘文件。极端的说,基于LSM树实现的HBase的写性能比Mysql高了一个数量级,读性能低了一个数量级。

  3. HBase内部管理

    当新数据写入HBase的时候,生成了HFile,HFile的数量会增加I/O负载。为降低此影响,HFile会被周期性地合并成一个。

    ① Minor合并:Minor合并在HStore中发生在多个HFile上。几个相邻的HFile被取出来合并后,重新写入到一个大的HFile中。完成时,删除的或者过期的文件没有被移除。Minor合并会影响HBase的性能,所以合并文件的数目是有限制的。默认10个

    ② Major合并:把所有的HFile合并为一个HFile,被删除或者过期的记录会被丢弃。一般的,在大型集群,它是手动触发的。这个操作非常耗时和耗费资源,必须在集群查询请求小的时候触发

    ③ Region分裂:Region分裂由RegionServer操作,一旦一个region的负载过大或者超过阈值256MB,便会被分裂成新的region

    ④ Region合并:新的region都是根据region-size阈值(一般是每个RegionServer100个)创建的,这会导致region的数量很大,浪费大量的内存和I/O以及吞吐性能。

    ⑤ RegionServer故障转移:一旦HMaster检测到RegionServer故障,会让其分配的region失效,region会分配到另外一个RegionServer上。

    ⑥ HBase删除请求:需要删除的数据会先被打上删除标记。Major合并进行的时候,被标记的数据会被丢弃,同时一个新的不含删除标记数据的HFile被创建。

  4. 客户端和服务器使用RPC通信的工作流程:

    ①客户端联系zookeeper去查找主HMaster以及根RegionServer的位置

    ②客户端通过HRegionInterface跟RegionServer通信来读写表

    ③客户端应用使用HMasterInterface操作HMaster来实现动态建表、添加列族以及其他操作

    ④然后,HMaster使用HRegionInterface通信去打开、关闭、移动、切分或者刷新regional

    ⑤主HMaster的数据以及根RegionServer的位置被HMastrer缓存在Zookeeper中

    ⑥RegionServer从Zookeeper中读取数据以获取日志分类任务信息,这是用来更新获取任务状态报告的

    ⑦RegionServer通过HMasterRegionServer与HMaster通信以传输一些信息,例如RegionServer的负载、RegionServer的错误以及RegionServer的启动的进程。有时候,ReginServer也通过HRegionInterface与根region或者元region通信,检查一个region的当前状态或者region分裂的时候去创建一个子region

    ⑧这种通信是以CPU时间或者一个阈值时间为间隔不断重复,以确保一切照常更新

  5. 读写周期:

    客户端首先将数据写入到WAL,然后写入HBase Memstore(内存),并被一个HStore共享,后来才被刷写到HFile

    ① Write-Ahead Logs:位于HDFS上,它实现了数据的可靠性。每个RegionServer上都有一个WAL。当RegionServer宕机而且MemStore没有被刷到磁盘的时候,WAL可以恢复数据到一个新的RegionServer上。

    ② MemStore:充当内存写缓存,默认大小为64MB。一旦MStore中的数据达到阈值(默认是堆大小的40%或者64MB),就会被刷到HDFS上的一个新的HFile中来持久化。块缓存使用最近最少使用(LRU)算法

  6. HBase数据类型

    HBase只有一种数据类型:字节数组。最多可以存储10~15MB的值到HBase的单元格中,如果值太大,可以将文件存储到HDFS中,然后在HBase中存储文件的路径。定义表时,列族的数量和名称是必须设置的,不包含值的列不进行存储(不同于传统数据库)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HBase是一个分布式的、可扩展的、面向列的NoSQL数据库,它基于Hadoop分布式文件系统(HDFS)进行数据存储和处理。以下是HBase架构和组件以及运行原理的概述: 1. HBase架构: - Master节点:负责管理和协调整个HBase集群,包括表的创建、Region的分配和负载均衡等任务。 - RegionServer节点:负责存储和管理数据的实际节点,每个RegionServer可以管理多个Region。 - ZooKeeper:HBase使用ZooKeeper来进行分布式协调和元数据的管理。 - HDFS:HBase使用HDFS来存储数据和日志文件。 2. HBase组件: - 表(Table):HBase中的数据以表的形式进行组织,表由多个行和列族构成。 - 行(Row):表中的每一行都有一个唯一的RowKey来标识,行由多个列组成。 - 列族(Column Family):表中的列被组织成列族,每个列族可以包含多个列。 - 列(Column):表中的每个列都由列族和列限定符(Qualifier)组成,用于存储实际的数据。 3. HBase运行原理: - 数据存储:HBase将数据按照RowKey的字典顺序进行分区,每个RegionServer负责管理一些连续的行范围,将数据存储在HDFS上的HFile文件中。 - 写入流程:当客户端进行写入操作时,数据首先会被写入WAL(Write-Ahead Log)文件,然后异步地写入内存中的MemStore。当MemStore达到一定阈值时,数据会被刷写到磁盘上的HFile文件。 - 读取流程:当客户端进行读取操作时,HBase会先从MemStore中查找数据,如果没有找到,则从磁盘上的HFile文件中进行查找。为了加速查询,HBase还使用了Block Cache(缓存)来缓存常用的数据块。 - 负载均衡和自动故障恢复:HBase在Master节点上运行负载均衡算法,通过移动Region来平衡集群的负载。同时,HBase使用ZooKeeper来监控RegionServer的状态,当某个RegionServer宕机时,Master节点会重新分配该Region的副本。 通过以上架构和组件,以及基于HDFS的数据存储和协调机制HBase能够实现高可靠性、高扩展性和高性能的分布式数据存储和查询。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值