首页 > 其他分享 >Hbase 面试题(五)

Hbase 面试题(五)

时间:2024-06-03 14:00:56浏览次数:22  
标签:面试题 WAL Scanner 删除 写入 HBase 数据 Hbase

1. 简述什么是WAL(Write Ahead Log)预写日志 ?

WAL(Write Ahead Log),即预写日志,是HBase中用于保证数据持久性和一致性的关键机制。以下是WAL的简要概述:

  1. 目的

    • WAL的主要目的是在数据实际写入到MemStore之前,先将其记录到一个日志中。这样即使在系统崩溃或故障的情况下,也能够从日志中恢复数据。
  2. 写入流程

    • 在HBase中,每次数据更新(包括插入、更新或删除操作)首先会被写入到WAL中。
    • 只有当WAL写入成功后,数据才会被写入到MemStore。
  3. 数据恢复

    • 如果HBase服务器发生故障,系统会使用WAL中的日志来重建MemStore,确保数据不会丢失。
  4. 异步写入

    • WAL的写入通常是异步进行的,这意味着它不会阻塞数据写入操作,从而保证了写操作的性能。
  5. 存储位置

    • WAL文件存储在HDFS上,与HBase的数据文件分开,以提高容错能力。
  6. 滚动和归档

    • 随着时间的推移,WAL文件会不断增长。当达到一定大小时,当前的WAL会关闭并归档,然后开启新的WAL文件。
  7. 清理策略

    • 当数据已经被成功刷新到HFile,并且没有被任何Region的MemStore使用时,相关的WAL文件可以被安全删除。
  8. 性能影响

    • 虽然WAL写入是异步的,但它仍然需要消耗I/O资源。在高负载情况下,WAL的性能可能会成为瓶颈。
  9. 配置和优化

    • 管理员可以根据系统的需求配置WAL的相关参数,如滚动策略、归档策略等。
  10. 多副本

    • 为了进一步提高数据的可靠性,WAL可以配置为在多个HDFS节点上存储多副本。

WAL是HBase中实现ACID(原子性、一致性、隔离性、持久性)特性的基础之一。通过先写日志再写内存的方式,WAL确保了即使在系统故障的情况下,用户的数据也不会丢失,从而提供了强大的数据一致性和持久性保证。

2. 详细阐述Hase的数据模型 ?

HBase是一个分布式的、面向列的NoSQL数据库,其数据模型主要基于以下几个核心概念:

  1. 表(Table)

    • 表是数据的集合,类似于关系型数据库中的表,但在HBase中,表的结构更加灵活。
  2. 行键(Row Key)

    • 行键是表中每一行数据的唯一标识符。数据在HBase中按照行键的字典序进行排序和存储。
    • 行键可以是任意的字节数组,通常设计为一个可排序的格式,以优化数据的读取。
  3. 列族(Column Family)

    • 列族是HBase中的一个逻辑概念,一组具有相似特性的列被归并为一个列族。
    • 列族内的列在物理存储上是聚合在一起的,共享相同的存储结构和访问模式。
  4. 列限定符(Column Qualifier)

    • 列限定符是列族内具体列的标识符。在HBase中,列族和列限定符一起构成了表中的列。
  5. 版本(Version)

    • HBase支持多版本数据,即同一行同一列可以存储多个版本的数据。
    • 默认情况下,HBase会根据时间戳保留最新的几个版本,但也可以根据需要配置更多的版本。
  6. 时间戳(Timestamp)

    • 每个单元格的写入操作都会被赋予一个时间戳,这通常是由HBase集群的协调服务ZooKeeper提供的。
    • 时间戳用于数据版本控制,也用于在读取操作中指定要读取的数据版本。
  7. 单元格(Cell)

    • 单元格是HBase中存储数据的基本单元,由行键、列族、列限定符和时间戳共同确定。
    • 单元格中的数据包括值(Value)和时间戳(Timestamp)。
  8. Region

    • HBase表的水平分片称为Region。每个Region由一个起始行键和终止行键定义,包含了一定范围的行。
    • 当表中的数据量增长到一定程度时,Region会自动分裂成新的Region。
  9. Store

    • Store是Region中针对每个列族的数据存储单元。每个Store由一个MemStore(内存中的数据缓存)和一个或多个HFile(磁盘上的文件存储)组成。
  10. RegionServer

    • RegionServer是HBase中的工作节点,负责管理一个或多个Region,处理客户端的读写请求。

HBase的数据模型设计为易于扩展,适合处理大规模数据集,并且能够提供高性能的读写访问。面向列的存储方式使得HBase在处理大量稀疏数据时特别有效,因为只有需要的列族会被读取和处理。此外,HBase的数据模型支持灵活的schema设计,允许在运行时动态添加列和列族,这使得HBase能够适应不断变化的数据需求。

3. 简述Hbase 构建Scanner体系 ?

HBase中的Scanner是一种用于遍历表中数据的机制,它允许用户执行范围查询和迭代读取。构建一个高效的Scanner体系涉及以下几个关键方面:

  1. 创建Scanner

    • Scanner通过指定表和起始行键创建。用户可以设置结束行键来定义扫描的范围。
  2. 列选择

    • 在创建Scanner时,可以指定需要检索的列。这有助于减少数据传输和处理的开销。
  3. 过滤器

    • 可以为Scanner设置过滤器,以在服务器端进行数据的过滤,只返回满足特定条件的数据。
  4. 缓存行

    • HBase允许配置Scanner的缓存行数,这可以减少RPC调用的次数,通过一次调用检索多行数据。
  5. 预取

    • HBase客户端可以预取Scanner的下一批数据,这样当用户请求下一行数据时,它可能已经被预先加载并准备好了。
  6. 服务器端扫描

    • Scanner可以在服务器端进行,减少了数据在网络中的传输量,尤其是在处理大量数据时。
  7. 内存使用

    • 在使用Scanner时,需要注意内存的使用,尤其是在处理大量数据时,避免内存溢出。
  8. BlockCache利用

    • Scanner可以利用BlockCache来加速数据的读取,特别是对于频繁访问的数据。
  9. 扫描顺序

    • 可以指定Scanner是按照升序还是降序遍历数据。
  10. 关闭Scanner

    • 完成数据检索后,应当关闭Scanner以释放服务器和客户端的资源。
  11. 性能优化

    • 可以通过调整Scanner的参数,如缓存行数、过滤器等,来优化扫描性能。
  12. 一致性

    • Scanner可以保证在扫描过程中数据的一致性视图,即使在数据不断变化的情况下。
  13. 错误处理

    • 在构建Scanner体系时,需要考虑错误处理机制,确保在遇到错误时能够恰当地恢复或重试。
  14. 并发扫描

    • 在多用户环境中,HBase可以支持多个Scanner并发运行,但需要注意资源的合理分配。

构建一个高效的Scanner体系对于提高HBase中数据检索的性能至关重要。通过合理配置和优化Scanner的使用,可以显著提高查询效率和系统的整体性能。

4. HBase 如何将某个表内存中的所有数据刷写到磁盘?

在HBase中,数据最初写入到内存中的MemStore。随着MemStore中数据量的增加,这些数据最终需要被刷新(flush)到磁盘上的StoreFile中。以下是HBase将表内存中的数据刷新到磁盘的步骤:

  1. 达到刷新阈值

    • 当MemStore中的数据量达到一定阈值时(基于内存使用量或时间),HBase会触发刷新操作。
  2. 刷新操作

    • 刷新操作会将MemStore中的数据持久化到磁盘上的StoreFile中。这个过程是自动进行的,并且是后台操作。
  3. 写入StoreFile

    • 刷新过程中,数据被写入到一个新的StoreFile中,这个文件存储在HDFS上。
  4. 更新引用

    • 一旦数据被写入StoreFile,MemStore会被清空,并且StoreFile会被添加到对应列族的Store中。
  5. 关闭MemStore

    • 在刷新操作完成后,旧的MemStore会被关闭,并且一个新的MemStore会被创建以接收新的写入。
  6. 可选的Compaction

    • 随着时间的推移,如果Store中存在多个StoreFile,HBase可能会执行Compaction操作,合并这些文件以优化存储和查询性能。

要手动触发刷新操作,可以使用HBase shell或Admin API:

  • 使用HBase Shell
    在HBase shell中,可以使用flush 'table_name'命令来刷新指定表的数据。

  • 使用Admin API
    通过HBase的Admin Java API,可以调用flush方法来刷新特定表的数据。

需要注意的是,强制刷新MemStore可能会导致短暂的性能下降,因为刷新操作涉及到磁盘I/O。因此,在生产环境中,通常建议让HBase自动管理刷新操作,以避免不必要的性能冲击。

此外,HBase还提供了一些配置参数,允许管理员调整刷新策略,例如设置MemStore的大小阈值,或者在低负载时执行刷新操作,以优化整体性能。

5. HBase中有哪些不同的压缩类型?

HBase支持多种压缩类型以优化存储和I/O性能,不同的压缩算法根据其特点适用于不同的场景。以下是HBase中常见的几种压缩类型:

  1. GZIP (GZ)

    • GZIP提供较高的压缩率,适合冷数据存储,即数据访问不频繁的场景。
    • 压缩和解压速度相对较慢,且更消耗CPU资源。
  2. LZO (Hadoop LZO)

    • LZO提供中等压缩率,压缩和解压速度较快。
    • 适用于热数据存储,即数据访问频繁的场景。
  3. Snappy

    • Snappy的压缩率比LZO低,但提供更快的压缩和解压速度。
    • 同样适用于热数据存储,且整体性能优于LZO。
  4. LZ4

    • LZ4与LZO的压缩率相近,但提供更快的压缩和解压速度。
  5. ZSTD

    • ZSTD是一种较新的压缩算法,提供高压缩率和较快的解压速度。
    • 适用于需要较高压缩率和快速解压的场景。
  6. NONE

    • 不使用压缩,适用于不需要压缩存储的场景。

每种压缩算法都有其特点,用户需要根据业务需求(如压缩率、压缩和解压速率等)选择最合适的压缩格式。通常情况下,选择Snappy或LZO是比较好的选择,因为它们的压缩开销较低,能节省存储空间同时保持较高的访问性能。

6. HBase中的墓碑标记(tombstone )是什么?HBase中有多少个墓碑标记?

在HBase中,墓碑标记(tombstone)是一种特殊的标记,用于指示某个单元格(cell)或一组单元格已被逻辑上删除。HBase是一个基于Hadoop的分布式列存储系统,它不会真正从磁盘上删除数据,而是使用墓碑标记来标识数据已经被删除。在后续的Compaction操作中,被标记的这些数据会被清理掉。

HBase中并没有一个固定的墓碑标记数量,因为墓碑的生成与删除操作相关,每当执行删除操作时,就会在相应的位置创建一个墓碑标记。这些标记会保留在系统中,直到经过major compaction操作时才被清除。在HBase中,有三种类型的删除操作,它们分别是:

  1. 删除特定版本的单元格(Delete)
  2. 删除某一列的所有版本(DeleteColumn)
  3. 删除某一列族的所有列(DeleteFamily)

每次执行这些删除操作时,HBase都会在相应的位置放置墓碑标记,而不是立即从磁盘上删除数据。这样做的好处是可以保持数据的一致性,并且可以优化磁盘空间的使用,因为不需要立即重写整个存储文件(HFile)。

由于HBase的删除操作只是增加了墓碑标记,并没有真正删除数据,所以系统中的墓碑标记数量是动态变化的,与执行的删除操作数量相关。只有在执行了major compaction操作之后,这些标记才会被清除,释放空间。

7. 解释Hbase如何实际删除一行?

在HBase中,"删除一行"这个操作与传统的关系型数据库中的删除操作有所不同。HBase是一个基于LSM树(Log-Structured Merge-tree)的NoSQL数据库,其设计目标是优化写入性能和存储效率。因此,HBase采用了一种特殊的机制来处理删除操作,这就是墓碑标记(tombstone)。

以下是HBase中删除一行数据的实际过程:

  1. 写入删除标记
    当客户端发起删除一行数据的请求时,HBase不会立即从磁盘上删除这些数据。相反,它在表中为这一行写入一个墓碑标记。这个墓碑标记指示这一行已经被逻辑上删除。

  2. 继续保留数据
    尽管一行数据被标记为已删除,它的数据仍然保留在HBase的存储文件(HFile)中。这是因为HBase的数据是不可变的,一旦写入,就不会被直接修改或删除。

  3. 读取时过滤
    当读取数据时,HBase会根据墓碑标记过滤掉已被逻辑删除的行。这意味着即使数据仍然存在于磁盘上,它也不会被返回给客户端。

  4. Compaction操作
    随着时间的推移,HBase会定期进行一种称为Compaction的后台操作。Compaction是LSM树中的一个过程,它合并多个较小的HFile文件,删除标记为删除的数据,并优化存储结构。

  5. Major Compaction
    在Major Compaction过程中,HBase会执行更彻底的文件合并,这可能涉及到删除整个文件或文件的大部分。在这个阶段,带有墓碑标记的行将从文件中完全移除,并且相关的空间会被回收。

  6. 释放空间
    一旦墓碑标记的行数据在Major Compaction中被清理,它们占用的空间会被释放,并且这些数据将不再占用存储空间。

  7. 更新元数据
    删除操作和Compaction操作都会更新HBase的元数据,确保系统的状态与实际存储的数据保持一致。

通过这种方式,HBase实现了一种空间和性能效率都很高的删除机制。虽然数据在逻辑上被立即删除,但物理删除会在后续的Compaction操作中进行,这样可以减少对磁盘I/O的频繁操作,提高系统的整体性能。

标签:面试题,WAL,Scanner,删除,写入,HBase,数据,Hbase
From: https://blog.csdn.net/jianing1018/article/details/139336983

相关文章

  • ShardingSphere面试题及参考答案(3万字长文)
    目录什么是ShardingSphere?ShardingSphere的主要组件有哪些?ShardingSphere支持哪些数据库?......
  • 持续总结中!2024年面试必问 20 道 Kafka面试题(三)
    上一篇地址:持续总结中!2024年面试必问20道Kafka面试题(二)-CSDN博客五、Kafka的ISR(In-SyncReplica)是什么?Kafka的ISR(In-SyncReplicas)是Kafka中用于维护数据一致性和高可用性的关键概念之一。ISR列表包含了一个领导者副本(Leader)和与之保持完全同步的追随者副本(Follower......
  • 程序分享--常见算法/编程面试题:删除有序数组中的重复项 II
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自我介绍》, 《做好面试准备,迎接2024金三银四》。或关注博主免费专栏【程序......
  • 赶紧收藏!2024 年最常见 20道 Kafka面试题(二)
    上一篇地址:赶紧收藏!2024年最常见20道Kafka面试题(一)-CSDN博客三、Kafka的设计架构是什么?Kafka的设计架构是分布式和可扩展的,旨在处理高吞吐量的数据流。以下是Kafka设计架构的关键组成部分及其功能:Producer(生产者):生产者是向Kafka集群发送消息的客户端。它们负责创建消息......
  • Java面试题:解释一下Java中的synchronized关键字,它是如何保证线程安全的?
    在Java中,synchronized关键字是一种同步锁机制,用于确保多个线程在访问共享资源时能够保持线程安全。线程安全是指在多线程环境下,当多个线程尝试同时访问共享资源时,任何时刻最多只有一个线程能够执行特定的代码段。synchronized关键字可以用于以下几个方面:方法同步:当synch......
  • 《Java开发及前端最全面试题-Offer直通车》目录
    Java开发是需求最广,工资高的细分领域,同时也是会的人最多,有的公司招1个Java开发,要面试几十甚至上百面试者,同时要求很高,要求通晓技术栈很多及很深深度。如果你正准备面试,想要脱颖而出,那么《Java开发及前端最全面试题-Offer直通车》是你的不二选择。本书汇集了多篇超过1万字的精......
  • 【手撕面试题】Vue(高频知识点三)
            每天10道题,100天后,搞定所有前端面试的高频知识点,加油!!!在看文章的同时,希望不要直接看答案,先思考一下自己会不会,如果会,自己的答案是什么?想过之后再与答案比对,是不是会更好一点,当然如果你有比我更好的答案,欢迎评论区留言,一起探讨技术之美。目录面试官:请简述一下v......
  • 前端面试题日常练-day47 【面试题】
    题目希望这些选择题能够帮助您进行前端面试的准备,答案在文末1.在Bootstrap中,以下哪个类用于创建一个具有响应式的栅格系统?a).grid-systemb).responsive-gridc).container-fluidd).grid-responsive2.哪个Bootstrap类用于创建一个具有圆角边框的按钮?a).btn-rou......
  • 程序分享--大厂常见算法/编程面试题:O(1) 时间插入、删除和获取随机元素
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自我介绍》, 《做好面试准备,迎接2024金三银四》。或关注博主免费专栏【程序......
  • 前端面试题日常练-day43 【面试题】
    题目希望这些选择题能够帮助您进行前端面试的准备,答案在文末1.在Bootstrap中,以下哪个类用于创建一个具有响应式的栅格系统?a).rowb).grid-systemc).containerd).responsive-grid2.哪个Bootstrap类用于创建一个具有圆角边框的容器?a).container-roundedb).rou......