HBase面试问题



亲爱的读者,这些HBase面试问题是专门为了让您熟悉在HBase主题的面试中可能遇到的问题类型而设计的。根据我的经验,优秀的采访者在面试期间很少会计划问任何特定问题,通常问题会从主题的一些基本概念开始,然后根据进一步的讨论以及您的回答继续进行。

有5个原子命令,它们由Hbase执行不同的操作。

Get、Put、Delete、Scan和Increment。

通过Hbase Shell建立与Hbase的连接,Hbase Shell是一个Java API。

主服务器将区域分配给区域服务器并在集群中处理负载均衡。

Zookeeper维护配置信息,提供分布式同步,并维护客户端和区域服务器之间的通信。

在Hbase中,禁用表是为了允许修改表或更改其设置。当表被禁用时,无法通过scan命令访问它。

Hbase > is_disabled “表名”

该命令将禁用所有以字母p开头的表。

过滤器用于从Hbase表中获取特定数据,而不是所有记录。

它们有以下类型。

  • 列值过滤器
  • 列值比较器
  • 键值元数据过滤器。
  • 行键过滤器。
  • Hbase没有内置的身份验证/权限机制。

  • 索引只能在键列上创建,但在RDBMS中可以在任何列上创建。

  • 只有一个HMaster节点,存在单点故障。

Hbase中的目录表维护元数据信息。它们被命名为-ROOT-和.META.。-ROOT-表存储关于.META.表位置的信息,而.META.表保存所有区域及其位置的信息。

Hbase运行在Hadoop之上,Hadoop是一个分布式系统。Haddop只能根据需要通过动态添加更多机器来进行纵向扩展。因此,Hbase是一个横向扩展的过程。

在Hbase中,客户端不会直接写入HFile。客户端首先写入WAL(Write Access Log),然后由Memstore访问。Memstore会定期将数据刷新到永久存储中。

随着越来越多的数据写入Hbase,会创建许多HFile。压缩是将这些HFile合并成一个文件的过程,并且在成功创建合并文件后,丢弃旧文件。

有两种类型的压缩。主压缩和次压缩。在次压缩中,相邻的小HFile被合并以创建一个单个HFile,而不会删除已删除的HFile。要合并的文件是随机选择的。

在主压缩中,将一列的所有HFile合并,并创建一个单个HFile。已删除的HFile将被丢弃,并且通常会手动触发。

Delete column命令删除列的所有版本,而delete family删除特定族的所有列。

Hbase中的单元格是Hbase表的最小单位,它以元组的形式保存数据{行、列、版本}。

此类用于存储有关列族的信息,例如版本数、压缩设置等。在创建表或添加列时,它用作输入。

版本的较低界限指示为列存储在Hbase中的最小版本数。例如,如果值为3,则将维护三个最新的版本,而较旧的版本将被删除。

TTL是一种数据保留技术,使用它可以将单元格的版本保留到特定时间段。一旦达到该时间戳,特定版本将被删除。

Hbase不支持表连接。但是,使用mapreduce作业,我们可以指定连接查询以从多个Hbase表中检索数据。

Hbase中的每一行都由一个唯一的字节数组标识,称为行键。

Hbase中的数据可以通过两种方式访问。

  • 使用行键和表扫描获取一系列行键值。

  • 以批处理方式使用mapreduce。

它们是-(i) 短而宽 (ii) 高而瘦

当存在以下情况时,会考虑短而宽的表设计。

  • 列数少。

  • 行数多。

当存在以下情况时,会考虑高而瘦的表设计。

  • 列数多。

  • 行数少。

hbase > alter '表名', {NAME => '列族名', VERSIONS => 4}

此命令从表中删除列族。

 
Hbase > disable ‘tablename’
Hbase > alter ‘tablename’ {NAME => ‘oldcolfamily’,NAME=>’newcolfamily’}
Habse > enable ‘tablename’
 
scan 'tablename', {LIMIT=>10,
STARTROW=>"start_row",
STOPROW=>"stop_row"}

对表运行主压缩。

在Hbase中执行数据批量加载主要有两个步骤。

  • 使用自定义mapreduce作业从数据源生成Hbase数据文件(StoreFile)。StoreFile以Hbase内部格式创建,可以有效加载。

  • 使用另一个工具(如completebulkload)导入准备好的文件,以将数据导入到正在运行的集群中。每个文件都加载到一个特定的区域。

Hbase使用称为区域复制的功能。在此功能中,对于表的每个区域,都将在不同的RegionServer中打开多个副本。负载均衡器确保区域副本不会在同一区域服务器上共同托管。

Hmaster是主服务器,负责监控集群中的所有RegionServer实例,并且是所有元数据更改的接口。在分布式集群中,它运行在NameNode上。

HRegionServer是RegionServer的实现。它负责服务和管理区域。在分布式集群中,RegionServer运行在DataNode上。

HBase提供了两种不同的BlockCache实现:默认的堆内LruBlockCache和BucketCache(通常)堆外。

预写日志(WAL)将对HBase中数据的更改记录到基于文件的存储中。如果RegionServer在MemStore刷新之前崩溃或不可用,则WAL可确保可以重放对数据的更改。

对于每个RegionServer只有一个WAL,RegionServer必须按顺序写入WAL,因为HDFS文件必须是顺序的。这会导致WAL成为性能瓶颈。

当区域被编辑时,需要重放属于该区域的WAL文件中的编辑。因此,WAL文件中的编辑必须按区域分组,以便可以重放特定的集合以重新生成特定区域中的数据。按区域对WAL编辑进行分组的过程称为日志拆分。

可以禁用WAL以提高性能瓶颈。

这是通过调用Hbase客户端字段Mutation.writeToWAL(false)来完成的。

当由于许多客户端查询同一张表而导致表中出现意外热点时,会进行手动区域拆分。

Habse Store承载一个MemStore和0个或多个StoreFile(HFile)。对于给定区域的表,Store对应于一个列族。

Habse中的HFile存储实际数据(而不是元数据),它是根据BigTable的SSTable文件设计的。

默认情况下,HBase中的表最初会创建一个区域。然后对于批量导入,所有客户端都将写入同一区域,直到它足够大以进行拆分并分布到整个集群中。因此,创建空区域是为了使此过程更快。

热点问题是指大量客户端流量集中到集群的一个节点或少数几个节点的情况。此流量可能代表读取、写入或其他操作。此流量会压垮负责托管该区域的单个机器,导致性能下降,并可能导致区域不可用。

可以通过将行键分散到多个区域来避免或最小化热点问题。实现此目的的不同技术包括加盐和哈希。

在 Hbase 中,值始终与其坐标一起传输;当单元格值通过系统时,它将伴随其行、列名和时间戳。如果行和列名很大,特别是与单元格值的大小相比,那么为了便于随机访问而在 HBase 存储文件(StoreFile(HFile))上保留的索引最终可能占据比数据本身更大的 HBase 分配的 RAM 块,因为单元格值坐标很大。

行键的作用域是列族。相同的行键可以存在于表中存在的每个列族中,而不会发生冲突。

Hbase:meta 表以以下格式存储系统中区域的详细信息。

info:regioninfo(此区域的序列化 HRegionInfo 实例)

info:server(包含此区域的 RegionServer 的服务器:端口)

info:serverstartcode(包含此区域的 RegionServer 进程的启动时间)

命名空间是表的逻辑分组。它类似于关系数据库系统中的数据库对象。

只能通过查询该列族的所有行来获取列族中所有列的完整列表。

从 Hbase 获取的记录始终按行键 -> 列族 -> 列限定符 -> 时间戳的顺序排序。

下一步是什么?

接下来,您可以回顾您之前完成的与该主题相关的作业,并确保您能够自信地谈论它们。如果您是应届毕业生,面试官不会期望您能回答非常复杂的问题,而是您必须使自己的基础概念非常扎实。

其次,如果您无法回答一些问题,实际上并没有太大关系,但重要的是,无论您回答了什么,都必须充满自信地回答。所以在面试期间要保持自信。我们在 tutorialspoint 祝您面试顺利,并祝您未来的工作一切顺利。干杯 :-)

hbase_questions_answers.htm
广告