大数据开发(HBase面试真题-卷二)

1、HBase读写数据流程?

HBase是一个面向大规模数据集的分布式存储系统。它基于Hadoop分布式文件系统(HDFS)构建,并提供了可靠性、高性能和高伸缩性的数据存储解决方案。

HBase的数据读写流程如下:

  1. 客户端发起读写请求应用程序通过HBase客户端API向HBase集群发起读写请求
  2. 客户端与Zookeeper交互HBase客户端与Zookeeper集群进行交互,以获取HBase集群的元数据信息,如表的信息、区域服务器等
  3. 客户端与HMaster交互HBase客户端向HMaster发送读写请求,请求涉及到的表和列族的元数据信息
  4. HMaster分配RegionServerHMaster根据表的元数据信息,将对应的RegionServer分配给客户端
  5. 客户端与RegionServer交互客户端与被分配的RegionServer进行通信,发送具体的读写请求
  6. RegionServer处理请求RegionServer接收到请求后,根据HBaser表的数据分布规则(Row Key)定位到对应的Region
  7. RegionServer与HDFS交互RegionServer通过HDFS访问底层的数据文件,进行读取或写入操作
  8. 数据读写完成RegionServer将读取到的数据或写入的数据返回给客户端

2、HBase的读写缓存?

写缓存HBase在接收到写请求后,会将数据先写入内存中的写缓存(Write Ahead Log),然后再异步地将数据刷写到磁盘上的数据文件。这种机制可以提高写入性能,因为内存的写入速度远快于磁盘的写入速度。
读缓存HBase再读取数据时,首先会尝试从内存中读缓存(BlockCache)中读取数据,如果缓存中没有相应的数据,则需要从磁盘上的数据文件中读取。读缓存可以提高读取性能,因为内存的读取速度远快于磁盘的读取速度。

3、在删除HBase中的一个数据的时候,它什么时候真正的进行删除呢?

在HBase中,删除操作并不会立即将数据从存储中删除。实际上,删除操作只是在数据的特定版本上打上一个删除标记,标记该数据已经被删除。这是因为HBase使用LSM存储结构。
当执行删除操作时,HBase会创建一个新的版本,并将该版本的数据标记为删除。之后,HBase会在后续的Major Compaction(主要合并)或Minor Compaction(次要合并)过程中,才会真正将带有删除标记的数据从存储中清除
Major Compaction是指HBase将所有的HFile文件进行合并,以减少存储空间的占用,并清理已标记为删除的数据。Major Compaction通常由系统自动触发,但也可以手动执行。
Minor Compaction是指HBase将相邻的小文件进行合并,以减少文件数量和提高读取性能。Minor Compaction也会清理已标记为删除的数据。

4、HBase的一个region由哪些东西组成?

  1. 行键范围(start key 和 end key)每个region都有一个唯一的行键范围,用于标识该region负责存储的数据范围
  2. MemStore:每个region都有一个内存中的MemStore,用于缓存该region内的写入操作。当MemStore的大小达到一定阈值时,会将其刷新到磁盘上的HFile。
  3. HFile每个region都包含一个或多个HFile,用于持久化存储该region内的数据。HFile是HBase中的底层存储格式,以块的形式存储数据,并提供快速的读取和写入操作。
  4. WAL(Write-Ahead-Log)每个region都有一个WAL,用于记录该region内的写入操作。WAL在写入操作发生时先将操作记录到日志中,然后再将数据写入MemStore。WAL的作用是保证数据的持久化和可恢复性。
  5. Region Server:每个region都由一个Region Server负责管理和处理。Region Server是HBase集群中的工作节点,负责处理读写请求、维护和管理region以及与HDFS进行交互

5、HBase的rowkey为什么不能超过一定的长度?为什么要唯一?rowkey太长会影响HFile的存储?

是的,HBase的rowkey不能超过一定的长度是为了保证HBase的性能和存储效率。当rowkey过长时,会导致HBase在存储数据时需要占用更多的存储空间,同时也会增加数据的读取和检索的时间
HBase的存储结构是基于HFile的,HFile使用了类似B+树的索引结构来组织数据。当rowkey过长时,HFile中的索引节点需要占用更多的存储空间,从而导致HFile文件变大,进而影响了存储性能。
此外,rowkey的唯一性是HBase中数据的检索和存储的重要依据。HBase使用rowkey来进行数据的分布和定位,保证了数据在分布式环境下的高效读写和检索。如果rowkey不唯一,可能会导致数据覆盖或重复存储的问题

6、HBase的Get和Scan的区别和联系?

HBase的Get和Scan是两种不同的读取数据的方式
Get操作:是通过指定行键(rowkey)来获取单个数据行的详细信息。通过Get操作,可以获取到指定行键对应的完整数据行,包括所有的行族和列的数据。Get操作适用于需要获取指定行的详细信息的场景。
Scan操作:是通过指定起始行键和终止行键来获取一系列数据行的信息。通过Scan操作,可以按照指定的范围获取多个数据行,范围可以是某个列族的所有数据,也可以是某个列族下某些列的数据。Scan操作适用于需要按照范围获取多个数据行的场景。

7、HBase的预分区?

HBase的预分区是将HBase的表按照指定的规则提前进行分区划分,以便在数据插入时自动将数据分散到不同的Region Server上。这样可以提高数据的负载均衡和查询性能。
预分区可以通过在创建表时指定预分区键来实现。预分区键可以是任意的字节数组,通常是根据数据的特点和访问模式来选择的。
预分区的好处是可以保证数据均匀分布在集群的不同Region Server上,避免数据倾斜问题。此外,预分区还可以提高查询的并行性,因为查询可以同时在多个Region Server上进行。
预分区的规则可以是基于哈希值,也可以是基于范围。基于哈希值的预分区可以确保数据均匀分布,但可能导致某些特定查询需要跨多个Region Server进行。基于范围的预分区可以根据数据的顺序进行分区,可以提高某些特定查询的性能

8、既然HBase底层数据是存储在HDFS上,为什么不直接使用HDFS,而还要用HBase?

首先,HDFS是一个分布式文件系统,主要用于存储大规模数据文件。它具有高容错性、高吞吐量和拓展性好等特点,适用于顺序读写大文件。但是,HDFS并不适用进行随机读写操作,因为它对小文件的支持不够高效
相比之下,HBase是一个分布式的、面向列的NoSQL数据块。它在HDFS上建立了一层抽象,提供了快速的随机读写能力。HBase的设计目标是支持高并发、低延迟的在线数据访问,适用于实时的数据查询和更新。另外,HBase还提供了强一致性的数据模型和灵活的数据模式,可以根据需求动态地添加和删除列。

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Key-Key

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值