0%

HBase Q&A

记录 HBase 常见的面试问题。


HFile

  • Q: HFile 从 V1 版本升级到 V2 版本最重要的两个因素是什么?
  • A: 1. 随着 KeyVlue 增多,布隆过滤器位数组越来越大,V2 在设计上将位数组拆分成多个独立的位数组。2. V2 支持多级索引结构,多级索引可以只加载部分索引,降低内存使用空间。

HBase 生态圈

  • Q: HBase 于 Hive 的区别
  • A: Hive 适合用来对一段时间内的数据进行分析查询,例如,用来计算趋势或者网站的日志。
    Hive 不应该用来进行实时的查询(Hive 的设计目的,也不是支持实时的查询)。
    因为它需要很长时间才可以返回结果;HBase 则非常适合用来进行大数据的实时查询,
    例如 Facebook 用 HBase 进行消息和实时的分析。
    对于 Hive 和 HBase 的部署来说,也有一些区别,Hive 一般只要有 Hadoop 便可以工作。
    而 HBase 则还需要 Zookeeper 的帮助(Zookeeper,是一个用来进行分布式协调的服务,
    这些服务包括配置服务,维护元信息和命名空间服务)。再而,HBase 本身只提供了 Java 的 API 接口,
    并不直接支持 SQL 的语句查询,而 Hive 则可以直接使用 HQL(一种类 SQL 语言)。
    如果想要在 HBase 上使用 SQL,则需要联合使用 Apache Phonenix,
    或者联合使用 Hive 和 HBase。但是和上面提到的一样,如果集成使用 Hive 查询 HBase 的数据,
    则无法绕过 MapReduce (还支持Spark),那么实时性还是有一定的损失。
    Phoenix 加 HBase 的组合则不经过 MapReduce 的框架,
    因此当使用 Phoneix 加 HBase 的组成,实时性上会优于 Hive 加 HBase 的组合。
    最后再提下 Hive 和 HBase 所使用的存储层,
    默认情况下 Hive 和 HBase 的存储层都是 HDFS。
    但是 HBase 也支持直接使用本机的文件系统。
  • Q: HBase是否支持表关联?
  • A: 官方给出的答案是干脆的,那就是“不支持”。如果想实现数据之间的关联,就必须自己去实现了,这是挑选 NoSQL 数据库必须付出的代价。
  • Q: HBase 与相关竞品的区别 (Kudu、Cassandra、Accumulo)
  • A:

读写

  • Q: HBase 是否支持 ACID?
  • A: ACID 就是 Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)的首字母缩写,ACID 是事务正确执行的保证,HBase 支持行级的 ACID。
    读写并发通过 MVCC 机制保障。写写并发通过写锁实现。

Compaction

  • Q: HBase 什么时候会删除多余的版本
  • A: 第一种是刷新数据到磁盘的时候,第二种是执行大合并的时候。用 RAW => true 的时候,可以获得所有版本的数据。
    表的保留的最大版本数为3。
    1 执行4次put,不刷新磁盘,紧接着scan,不论版本数,将会返回4版本的数据。
    2 执行4次put,刷到磁盘,紧接着执行scan,将会返回3个版本的数据
    3 执行4次put,刷到磁盘,再执行4次put,并刷新到磁盘,紧接着执行scan,将会返回6个版本数
    4 执行4次put,刷到磁盘,再执行4次put,并刷新到磁盘,再进行大合并,紧接着scan,将会返回3个版本数