【HBase】架构

这篇具有很好参考价值的文章主要介绍了【HBase】架构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

整体架构

【HBase】架构

Master

实现类为 HMaster。

负责监控集群中所有的 RegionServer 实例。

(1)管理元数据表格 hbase:meta,接收用户对表格创建修改删除的命令并执行

(2)监控 region 是否需要进行负载均衡故障转移和 region 的拆分

通过启动多个后台线程监控实现上述功能:

负载均衡器

周期性监控 region 分布在 regionServer 上面是否均衡,由参数 hbase.balancer.period 控 制周期时间,默认 5 分钟。

元数据管理器

定期检查和清理 hbase:meta 中的数据。

预写日志处理器

把 master 需要执行的任务记录到预写日志 WAL 中,如果 master 宕机,让 backupMaster 读取日志继续干。

Region Server

实现类为 HRegionServer,

(1)负责数据 cell 的处理,例如写入数据 put,查询数据 get 等

(2)拆分合并 region 的实际执行者,有 master 监控,有 regionServer 执行。

Zookeeper

进行 master 的高可用、记录 RegionServer 的部署信息、并且存储有 meta 表的位置信息

HBase 对于数据的读写操作时直接访问 Zookeeper 的,在 2.3 版本推出 Master Registry 模式,客户端可以直接访问 master。

HDFS

为 Hbase 提供最终的底层数据存储服务,同时为 HBase 提供高容错的支持。

Master架构

【HBase】架构

Meta 表格

元数据表管理器 定期管理版本

hbase:meta,只是在 list 命令中被过滤掉了,本质上和 HBase 的其他表格一样。

RowKey:

([table],[region start key],[region id]) 即 表名,region 起始位置和 regionID。

列:

info:regioninfo 为 region 信息,存储一个 HRegionInfo 对象。

info:server 当前 region 所处的 RegionServer 信息,包含端口号。 info:

serverstartcode 当前 region 被分到 RegionServer 的起始时间。

如果一个表处于切分的过程中,即 region 切分,还会多出两列 info:splitA 和 info:splitB, 存储值也是 HRegionInfo 对象,拆分结束后,删除这两列。

注意:

在客户端对元数据进行操作的时候才会连接master。

如果对数据进行读写,直接连接 zookeeper 读取目录/hbase/meta-region-server 节点信息,会记录 meta 表格的位置。直接读 取即可,不需要访问 master,这样可以减轻 master 的压力,相当于 master 专注 meta 表的 写操作,客户端可直接读取 meta 表。

在 HBase 的 2.3 版本更新了一种新模式:Master Registry。客户端可以访问 master 来读取 meta 表信息。加大了 master 的压力,减轻了 zookeeper 的压力。

RegionServer 架构

【HBase】架构

MemStore

写缓存。

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

WAL

由于数据要经 MemStore 排序后才能刷写到 HFile,但把数据保存在内存中会有很高的概率导致数据丢失。

为了解决这个问题,数据会先写在一个叫做 Write-Ahead logfile 的文件 中,然后再写入 MemStore 中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。

BlockCache

读缓存

每次查询出的数据会缓存在 BlockCache 中,方便下次查询。

读写流程

【HBase】架构

HFile结构

HFile 是存储在 HDFS 上面每一个 store 文件夹下实际存储数据的文件。

存储数据本身(keyValue 键值对)、元数据记录文件信息数据索引元数据索引和 一个固定长度的尾部信息(记录文件的修改情况)

键值对按照块大小(默认 64K)保存在文件中.

数据索引按照块创建,块越多,索引越 大。

每一个 HFile 会维护一个布隆过滤器(就像是一个很大的地图,文件中每有一种 key, 就在对应的位置标记,读取时可以大致判断要 get 的 key 是否存在 HFile 中)。大致是因为可能有哈希碰撞。

KeyValue 内容如下:

rowlength -----------→ key 的长度

row -----------------→ key 的值

columnfamilylength --→ 列族长度

columnfamily --------→ 列族

columnqualifier -----→ 列名

timestamp -----------→ 时间戳(默认系统时间)

keytype -------------→ Put

可通过 HBase 提供的命令来查看存 储在 HDFS 上面的 HFile 元数据内容。

bin/hbase hfile -m -f /hbase/data/命名空间/表名/regionID/列族/HFile 名

写流程

【HBase】架构

(1)首先访问 zookeeper,获取 hbase:meta 表位于哪个 Region Server;

(2)访问对应的 Region Server,获取 hbase:meta 表,将其缓存到连接中,作为连接属性 MetaCache,由于 Meta 表格具有一定的数据量,导致了创建连接比较慢

之后使用创建的连接获取 Table,这是一个轻量级的连接,只有在第一次创建的时候会检查表格是否存在访问 RegionServer,之后在获取 Table 时不会访问 RegionServer;

(3)调用Table的put方法写入数据,此时还需要解析RowKey对照缓存的MetaCache, 查看具体写入的位置有哪个 RegionServer;

(4)将数据顺序写入(追加)到 WAL,此处写入是直接落盘的,并设置专门的线程控制 WAL 预写日志的滚动(类似 Flume);

(5)根据写入命令的 RowKey 和 ColumnFamily 查看具体写入到哪个 MemStory,并且 在 MemStory 中排序;

(6)向客户端发送 ack;

(7 )等达到 MemStore 的刷写时机后,将数据刷写到对应的 store 中。

读操作

【HBase】架构

优先访问 Block Cache,查找是否之前读取过,并且可以读取 HFile 的索引信息和 布隆过滤器。

不管读缓存中是否已经有数据了(可能已经过期了),都需要再次读取写缓存和 store 中的文件。

最终将所有读取到的数据合并版本,按照 get 的要求返回即可。文章来源地址https://www.toymoban.com/news/detail-443756.html

到了这里,关于【HBase】架构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hbase解决ERROR: KeeperErrorCode = ConnectionLoss for /hbase/master报错

    1、在单机模式中,要先修改一个文件:/usr/local/hbase/conf/hbase-site.xml hbase-site.xml内容: 保存运行 报错 报错原因:可能是因为之前启动过hadoop,然后里面/usr/local/hbase/hbase-tmp有hbase.id不一致的原因导致的 解决办法:将之前的hbase-site.xml的内容修改为 成功运行 hbase基础命令

    2024年02月09日
    浏览(33)
  • ERROR: KeeperErrorCode = NoNode for /hbase/master

    错误 \\\"ERROR: KeeperErrorCode = NoNode for /hbase/master\\\" 通常发生在使用HBase时,这个错误表明在ZooKeeper中没有找到HBase Master节点的相关条目。这个问题可能由多种原因引起,以下是一些可能的原因和相应的解决方案: 可能的原因: HBase Master节点未正常启动或已崩溃 :如果HBase Master节点

    2024年04月10日
    浏览(29)
  • 【手写数据库toadb】数据库planner的整体架构,以及逻辑查询树的设计与实现流程

    ​ 专栏内容 : 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便阶段学

    2024年02月05日
    浏览(37)
  • hbase报错 ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing

    运行环境: hadoop3.2.3(伪分布式) jdk1.8 hbase2.5.5 解决方案: 1.删除hbase内置zookeeper信息 2.删除hdfs中hbase相关信息 重启hbase即可。

    2024年02月03日
    浏览(39)
  • HBase中master正常启动,自动关闭——原因以及解决办法

    regionserver一直在运行,而master启动之后,过一会自动停止,因为master停止,所以也无法访问hbase管理web页面。 可能的原因: 虚拟机的时间不同步 防火墙没有关闭 hbase中的hbase-site.xml文件中的属性值(hbase.rootdir)主机端口不一致 缺少配置 虚拟机时间不同步,虚拟机集群时间不

    2024年02月06日
    浏览(32)
  • HBase:Error:KeeperErrorCode=ConnectionLoss for /hbase/master For usage try ‘help‘ ‘disable‘

    1.我在输入查询数据库语句时出错,错误如下图: 然后我返回去检查启动的Hadoop与zookeeper,发现zookeeper的状态缺少一个follower,我是一个master,两个slave,其中一个slave的zookeeper状态是not running,其他两个状态正常,然后我就用之前的方法,删除了和myid在同一目录下生成的version

    2024年02月02日
    浏览(35)
  • HBase启动后查询报错:ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing

    报错信息: 查询百度 https://blog.csdn.net/weixin_43648549/article/details/123615758 (内容大概需要进行HBase初始化) 删除zookeeper中的所有的/hbase目录 删除HDFS中的/hbase目录(具体目录看hbase-site.xml文件) 然后重新启动 但是解决这个问题的时候没有看见最后一个问题就去解决了,导致具体解

    2024年02月04日
    浏览(33)
  • ERROR: KeeperErrorCode = NoNode for /hbase/master,hbase在shell命令行中查看表时报错解决方案

    修改了hbase的配置文件hbase-site.xml伪分布式环境,会导致文件的不完整,hadoop上文件与本地文件不一致,所以进入hbase时list搜索不到之前的一整个文件。简而言之,之前时分布式存储的,3个机器,1个存储1块构成完整的文件,现去掉2个,再次查询时就会报错。 1.退出hbase shel

    2024年02月03日
    浏览(31)
  • HBase伪分布式配置下,报错:org.apache.hadoop.hbase.PleaseHoldException: Master is initializing的解决方案

    今天在使用HBase Java API编程实践时发现出现报错,同样在创建表和查看HBase集群状态信息时也出现报错,以下是错误截图: 这是由于HBase的主节点正在初始化过程中,无法处理请求。通常发生在启动HBase集群或进行主节点故障转移时。HBase主节点在启动或重启时需要一些时间来

    2024年02月05日
    浏览(33)
  • ERROR:org.apache.hadoop.hbase.PleaseHoldException: Master is initializing错误

    重新安装hbase后,在hbase shell中查看所有命名空间时,出现了ERROR:org.apache.hadoop.hbase.PleaseHoldException: Master is initializing错误。     1、root用户下,关闭hbase stop-hbase.sh  2、执行以下命令删除HDFS下的hbase数据。 hadoop fs -rm -r /hbase  3、将zookeeper客户端下的hbase文件也删除。  1、sh z

    2023年04月14日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包