聊一聊 HBase 是如何写入数据的?「建议收藏」

聊一聊 HBase 是如何写入数据的?「建议收藏」i,大家好,我是大D。今天继续了解下 HBase 是如何写入数据的,然后再讲解一下一个比较经典的面试题。

聊一聊 HBase 是如何写入数据的?

hi,大家好,我是大D。今天继续了解下 HBase 是如何写入数据的,然后再讲解一下一个比较经典的面试题。

聊一聊 HBase 是如何写入数据的?「建议收藏」

Region Server 寻址

  1. HBase Client 访问 ZooKeeper;
  2. 获取写入 Region 所在的位置,即获取 hbase:meta 表位于哪个 Region Server;
  3. 访问对应的 Region Server;
  4. 获取 hbase:meta 表,并查询出目标数据位于哪个 Region Server 中的哪个 Region 中。并将该 table 的 Region 信息以及 meta 表的位置信息缓存在客户端的 meta cache,方便下次访问;

写 Hlog

  1. HBase Client 向 Region Server 发送写 Hlog 请求;
  2. Region Server 会通过顺序写入磁盘的方式,将 Hlog 存储在 HDFS 上;

写 MemStore 并返回结果

  1. HBase Client 向 Region Server 发送写 MemStore 请求;
  2. 只有当写 Hlog 和写 MemStore 的请求都成功完成之后,并将反馈给 HBase Client,这时对于整个 HBase Client 写入流程已经完成。

MemStore 刷盘

HBase 会根据 MemStore 配置的刷盘策略定时将数据刷新到 StoreFile 中,完成数据持久化存储。

为什么要把 WAL 加载到 MemStore中,再刷写成 HFile 呢?

WAL (Write-Ahead-Log) 预写日志是 HBase 的 RegionServer 在处理数据插入和删除过程中用来记录操作内容的一种日志。每次Put、Delete等一条记录时,首先将其数据写入到 RegionServer 对应的 HLog 文件中去。

而WAL是保存在HDFS上的持久化文件,数据到达 Region 时先写入 WAL,然后被加载到 MemStore 中。这样就算Region宕机了,操作没来得及执行持久化,也可以再重启的时候从 WAL 加载操作并执行。

那么,我们从写入流程中可以看出,数据进入 HFile 之前就已经被持久化到 WAL了,而 WAL 就是在 HDFS 上的,MemStore 是在内存中的,增加 MemStore 并不能提高写入性能,为什么还要从 WAL 加载到 MemStore中,再刷写成 HFile 呢?

  • 数据需要顺序写入,但 HDFS 是不支持对数据进行修改的;
  • WAL 的持久化为了保证数据的安全性,是无序的;
  • Memstore在内存中维持数据按照row key顺序排列,从而顺序写入磁盘;

所以 MemStore 的意义在于维持数据按照RowKey的字典序排列,而不是做一个缓存提高写入效率。

另外,非常欢迎大家加我VX: Abox_0226 ,备注「进群」,有关大数据技术的问题在群里一起探讨。

原文地址:https://www.cnblogs.com/datadance/archive/2022/05/18/16284653.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5249.html

(0)
上一篇 2023-05-17
下一篇 2023-05-17

相关推荐

  • 用PyQt实现进度条

    用PyQt实现进度条PyQt是一款Python的GUI框架,它继承了Qt框架的特点,这个特点就是PyQt具有极强的可扩展性、跨平台性以及代码重用性。PyQt现在也成为了Python常用的GUI库之一,它支持多种操作系统并且可以创建桌面GUI应用、移动应用和Web应用等多种类型的应用。

    2024-07-25
    30
  • hive orc文件_ora是什么文件

    hive orc文件_ora是什么文件ORC文件是以二进制的方式存储的,不可以直接读取,但由于ORC的自描述特性,其读写不依赖于 Hive Metastore 或任何其他外部元数据。本身存储了文件数据、数据类型及编码信息。因为文件是自包含

    2023-06-02
    157
  • php与mysql基础教程_mysql数据库有什么用

    php与mysql基础教程_mysql数据库有什么用php操作数据库八步走 <?php // 1、建立连接 $connection = mysqli_connect('127.0.0.1', 'root', &#3

    2023-01-22
    143
  • MongoDB权限控制(6)[亲测有效]

    MongoDB权限控制(6)[亲测有效]权限概述 在mongodb里面的用户是属于数据库的,每个数据库有自己的管理员,管理员登录后,只能操作所属的数据库。 注意:一般在admin数据库中创建的用户授予超级管理员权限,登录后可以操作任何的数据

    2023-03-27
    165
  • HTTP 429错误

    HTTP 429错误在使用互联网服务时,我们可能会遇到一些错误和问题。其中一种常见的错误是HTTP 429错误,也称为“太多请求错误”。

    2024-05-11
    74
  • Python实现numpy.ndarray转list

    Python实现numpy.ndarray转listnumpy.ndarray是numpy中最重要的多维数组结构,它非常适合在数据处理和科学计算领域中使用。

    2024-06-17
    50
  • Python列表排序

    Python列表排序在编程中,需要处理的数据可能会以不同的方式进行分类和排序。Python中的列表是一种最常用的数据结构,因此排序是列表操作中最重要的部分之一。排序不仅可以让我们更好地理解数据,还可以让我们更有效地处理和展示不同类型的数据。在本文中,我们将以Python中的列表为例,深入探讨排序的理论和实践。

    2024-07-11
    43
  • MySQL 递归查询实践总结[通俗易懂]

    MySQL 递归查询实践总结[通俗易懂]MySQL复杂查询使用实例 By:授客 QQ:1033553122 表结构设计 SELECT id, `name`, parent_id FROM `tb_testcase_suite` 说明: pa

    2023-02-14
    168

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注