• 在线客服

  • 扫描二维码
    下载博学谷APP

  • 扫描二维码
    关注博学谷微信公众号

  • 意见反馈

原创 大数据Hbase面试题汇总

发布时间:2019-08-20 18:49:37 浏览 7726 来源:博学谷资讯 作者:照照

    大数据中,我们总会碰到Hbase数据库。尤其对于即将要面试大数据的小伙伴来说,Hbase数据库更是绕不过去的一个重要考点,因此小编汇总了近些年来比较常见且经典的大数据Hbase面试题,希望可以帮到大家。

     

    大数据Hbase面试题

     

    1、Hbase的特点是什么

     

    (1)Hbase 一个分布式的基于列式存储的数据库,基于Hadoop的 hdfs 存储,zookeeper 进行管理。

     

    (2)Hbase 适合存储半结构化或非结构化数据,对于数据结构字段不够确定或者杂乱无章很难按一个概念去抽取的数据。

     

    (3)Hbase 为 null 的记录不会被存储.

     

    (4)基于的表包含 rowkey,时间戳,和列族。新写入数据时,时间戳更新, 同时可以查询到以前的版本.

     

    (5)hbase 是主从架构。hmaster 作为主节点,hregionserver 作为从节点

     

    2、Hbase如何导入数据

     

    使用MapReduce Job 方式,根据 Hbase API 编写 java 脚本,将文本文件用文件流的方式截取,然后存储到多个字符串数组中,在 put 方法下,通过对表中的列族进行 for 循环遍历列名,用 if 判断列名后进行 for 循环调用 put.add 的方法对列族下每一个列进行设值,每个列族下有几个了就赋值几次!没有表先对先创建表。

     

    3、Hbase的存储结构?

     

    答:Hbase 中的每张表都通过行键(rowkey)按照一定的范围被分割成多个子表(HRegion),默认一个HRegion 超过256M 就要被分割成两个,由HRegionServer管理,管理哪些 HRegion 由 Hmaster 分配。 HRegion 存取一个子表时,会创建一个 HRegion 对象,然后对表的每个列族(Column Family)创建一个 store 实例, 每个 store 都会有 0 个或多个 StoreFile 与之对应,每个 StoreFile 都会对应一个HFile,HFile 就是实际的存储文件,因此,一个 HRegion 还拥有一个 MemStore实例。

     

    4、Hbase 和 hive 有什么区别问题导读:

     

    hive 与Hbase的底层存储是什么?hive 是产生的原因是什么?Hbase是为了弥补 hadoop 的什么缺陷

     

    答案 : 共同点:

     

    (1)Hbase与 hive 都是架构在 hadoop 之上的。都是用 hadoop 作为底层存储区别:

     

    (2)Hive是建立在 Hadoop 之上为了减少 MapReducejobs 编写工作的批处理系统,HBase 是为了支持弥补 Hadoop 对实时操作的缺陷的项目 。

     

    (3)想象你在操作 RMDB 数据库,如果是全表扫描,就用 Hive+Hadoop,如果是索引访问,就用 HBase+Hadoop 。

     

    (4)Hive query 就是 MapReduce jobs 可以从 5 分钟到数小时不止,HBase 是非常高效的,肯定比 Hive 高效的多。

     

    (5)Hive 本身不存储和计算数据,它完全依赖于HDFS和 MapReduce,Hive中的表纯逻辑。

     

    (6)hive 借用 hadoop 的 MapReduce 来完成一些 hive 中的命令的执行

     

    (7)Hbase是物理表,不是逻辑表,提供一个超大的内存 hash 表,搜索引擎通过它来存储索引,方便查询操作。

     

    (8)hbase 是列存储。

     

    (9)hdfs 作为底层存储,hdfs 是存放文件的系统,而 Hbase 负责组织文件。

     

    (10)hive 需要用到 hdfs 存储文件,需要用到 MapReduce 计算框架。

     

    5、解释下 hbase 实时查询的原理

     

    答:实时查询,可以认为是从内存中查询,一般响应时间在 1 秒内。HBase 的机制是数据先写入到内存中,当数据量达到一定的量(如 128M),再写入磁盘中, 在内存中,是不进行数据的更新或合并操作的,只增加数据,这使得用户的写操作只要进入内存中就可以立即返回,保证了 HBase I/O 的高性能。

     

    6、描述 Hbase 的 rowKey 的设计原则

     

    问题导读:联系 region 和 rowkey 关系说明,设计可参考以下三个原则.

     

    (1)rowkey 长度原则

     

    rowkey 是一个二进制码流,可以是任意字符串,最大长度 64kb,实际应用中一般为 10-100bytes,以 byte[]形式保存,一般设计成定长。建议越短越好,不要超过 16 个字节, 原因如下:

     

    数据的持久化文件 HFile 中是按照 KeyValue 存储的,如果 rowkey 过长会极大影响 HFile 的存储效率 MemStore 将缓存部分数据到内存,如果 rowkey 字段过长,内存的有效利用率就会降低,系统不能缓存更多的数据,这样会降低检索效率。

     

    (2)rowkey 散列原则

     

    如果 rowkey 按照时间戳的方式递增,不要将时间放在二进制码的前面,建议将 rowkey 的高位作为散列字段,由程序随机生成,低位放时间字段,这样将提高数据均衡分布在每个 RegionServer,以实现负载均衡的几率。如果没有散列字段,首字段直接是时间信息,所有的数据都会集中在一个 RegionServer 上,这样在数据检索的时候负载会集中在个别的 RegionServer 上,造成热点问题,会降低查询效率。

     

    (3)rowkey 唯一原则

     

    必须在设计上保证其唯一性,rowkey 是按照字典顺序排序存储的,因此, 设计 rowkey 的时候,要充分利用这个排序的特点,将经常读取的数据存储到一块,将最近可能会被访问的数据放到一块。

     

    7、列簇怎么创建比较好? (<=2)

     

    答:rowKey 最好要创建有规则的 rowKey,即最好是有序的。HBase 中一张表最好只创建一到两个列族比较好,因为 HBase 不能很好的处理多个列族。

     

    8、描述 Hbase 中 scan 和 get 的功能以及实现的异同.

     

    (1)按指定RowKey获取唯一一条记录 ,get方法( org.apache.hadoop.hbase.client.Get ) Get的方法处理分两种 : 设置了ClosestRowBefore 和没有设置的 rowlock .主要是用来保证行的事务性,即每个get 是以一个 row 来标记的.一个 row 中可以有很多 family 和 column.

     

    (2)按指定的条件获取一批记录,scan 方法(org.apache.Hadoop.hbase.client.Scan)实现条件查询功能使用的就是 scan 方式.

     

    1)scan 可以通过 setCaching 与 setBatch 方法提高速度(以空间换时间);

     

    2)scan 可以通过 setStartRow 与 setEndRow 来限定范围([start,end]start 是闭区间,end 是开区间)。范围越小,性能越高。

     

    3)scan 可以通过 setFilter 方法添加过滤器,这也是分页、多条件查询的基础。 3.全表扫描,即直接扫描整张表中所有行记录

     

    9、请详细描述 Hbase 中一个 Cell 的结构

     

    HBase 中通过 row 和 columns 确定的为一个存贮单元称为 cell。

     

    Cell:由{row key, column(=<family> + <label>), version}是唯一确定的单元

     

    cell 中的数据是没有类型的,全部是字节码形式存贮

     

    10、请描述 Hbase 中 scan 对象的 setCache 和 setBatch 方法的使用.

     

    cache 是面向行的优化处理,batch 是面向列的优化处理

     

    11、简述 HBASE 中 compact 用途是什么,什么时候触发,分为哪两种,有什么区别,有哪些相关配置参数?

     

    在Hbase中每当有 memstore 数据 flush 到磁盘之后,就形成一个 storefile, 当 storeFile 的数量达到一定程度后,就需要将 storefile 文件来进行compaction 操作。

     

    Compact 的作用:

     

    1>.合并文件

     

    2>.清除过期,多余版本的数据

     

    3>.提高读写数据的效率

     

    12、HBase 中 实 现 了 两 种 compaction 的 方 式 : minor and major. 这 两 种compaction 方式的区别是:

     

    (1)Minor 操作只用来做部分文件的合并操作以及包括 minVersion=0 并且设置 ttl 的过期版本清理,不做任何删除数据、多版本数据的清理工作。

     

    (2)Major 操作是对 Region 下的 HStore 下的所有 StoreFile 执行合并操作, 最终的结果是整理合并出一个文件。

     

    13、简述 Hbase filter 的实现原理是什么?结合实际项目经验,写出几个使用filter 的场景。

     

    HBase 为筛选数据提供了一组过滤器,通过这个过滤器可以在 HBase 中的数据的多个维度(行,列,数据版本)上进行对数据的筛选操作,也就是说过滤器最终能够筛选的数据能够细化到具体的一个存储单元格上(由行键, 列名,时间戳定位)。RowFilter、PrefixFilter.....hbase 的 filter 是通过 scan 设置的,所以是基于 scan 的查询结果进行过滤.

     

    过滤器的类型很多,但是可以分为两大类--比较过滤器,专用过滤器。过滤器的作用是在服务端判断数据是否满足条件,然后只将满足条件的数据返回给客户端;如在进行订单开发的时候,我们使用 rowkeyfilter 过滤出某个用户的所有订单。

     

    14、Hbase 内部是什么机制

     

    在 HBase 中无论是增加新行还是修改已有的行,其内部流程都是相同的。HBase 接到命令后存下变化信息,或者写入失败抛出异常。默认情况下,执行写入时会写到两个地方:预写式日志(write-ahead log,也称 HLog)和 MemStore。HBase 的默认方式是把写入动作记录在这两个地方,以保证数据持久化。只有当这两个地方的变化信息都写入并确认后,才认为写动作完成。MemStore 是内存里的写入缓冲区,HBase 中数据在永久写入硬盘之前在这里累积。当MemStore 填满后,其中的数据会刷写到硬盘,生成一个HFile。HFile 是HBase 使用的底层存储格式。HFile 对应于列族,一个列族可以有多个 HFile,但一个 HFile 不能存储多个列族的数据。在集群的每个节点上,每个列族有一个MemStore。大型分布式系统中硬件故障很常见,HBase 也不例外。

     

    设想一下,如果MemStore 还没有刷写,服务器就崩溃了,内存中没有写入硬盘的数据就会丢失。HBase 的应对办法是在写动作完成之前先写入 WAL。HBase 集群中每台服务器维护一个 WAL 来记录发生的变化。WAL 是底层文件系统上的一个文件。直到WAL 新记录成功写入后,写动作才被认为成功完成。这可以保证 HBase 和支撑它的文件系统满足持久性。大多数情况下,HBase 使用 Hadoop 分布式文件系统(HDFS)来作为底层文件系统。如果 HBase 服务器宕机,没有从 MemStore 里刷写到 HFile 的数据将可以通过回放 WAL 来恢复。你不需要手工执行。Hbase 的内部机制中有恢复流程部分来处理。每台 HBase 服务器有一个 WAL,这台服务器上的所有表(和它们的列族)共享这个 WAL。

     

    你可能想到,写入时跳过 WAL 应该会提升写性能。但我们不建议禁用 WAL, 除非你愿意在出问题时丢失数据。如果你想测试 一下,如下代码可以禁用 WAL: 注意:不写入 WAL 会在 RegionServer 故障时增加丢失数据的风险。关闭 WAL, 出现故障时 HBase 可能无法恢复数据,没有刷写到硬盘的所有写入数据都会丢失。

     

    15、HBase 宕机如何处理

     

    答:宕机分为 HMaster 宕机和 HRegisoner 宕机,如果是 HRegisoner 宕机,HMaster 会将其所管理的 region 重新分布到其他活动的 RegionServer 上,由于数据和日志都持久在 HDFS 中,该操作不会导致数据丢失。所以数据的一致性和安全性是有保障的。如果是 HMaster 宕机, HMaster 没有单点问题, HBase 中可以启动多个HMaster,通过 Zookeeper 的 Master Election 机制保证总有一个 Master 运行。即ZooKeeper 会保证总会有一个 HMaster 在对外提供服务。

     

    以上就是大数据Hbase面试题汇总。希望大家把本文多看几遍,梳理一下Hbase的所有知识点。这样一来,在面试的时候,即使遇到这个知识点的问题,也可以以不变应万变。

    申请免费试学名额    

在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!

上一篇: 大数据工资一般多少?大数据职业发展分析 下一篇: Spark运行架构及其特点讲解

相关推荐 更多

热门文章

  • 前端是什么
  • 前端开发的工作职责
  • 前端开发需要会什么?先掌握这三大核心关键技术
  • 前端开发的工作方向有哪些?
  • 简历加分-4步写出HR想要的简历
  • 程序员如何突击面试?两大招带你拿下面试官
  • 程序员面试技巧
  • 架构师的厉害之处竟然是这……
  • 架构师书籍推荐
  • 懂了这些,才能成为架构师
  • 查看更多

扫描二维码,了解更多信息

博学谷二维码