HBase面试须知

为什么hbase可以很快

  • 从逻辑结构上来说

  1. 表按照行键进行了排序,所以查询时可以很快定位
  2. 数据按照行键切分为多个HRegion,分布在多个RegionServer中,查询大量数据时,多个RegionServer可以一起工作,从而提高速度
  • 从物理结构上来说:
  1. HRegion是存活在RegionServer的内存中的,读写会非常的高效
  2. 还有HFile的支持保证大量的数据可以持久化的保存
  3. 数据最终落地到HDFS中,分布式的存储,保证数据段可靠性和可扩展性

为什么hbase可以存储很多数据

  • 基于hdfs,所以支持可扩展性,可以通过增加大量的廉价的硬件提高存储容量
  • 空的数据不占用空间,当存储稀疏数据时,不会浪费空间
  • 按例存储,同一列的数据存放在一起,而同一列的数据一般都是同样的类型的内容相似的数据,可以实现非常高效的压缩,节省空间

为什么hbase的数据是可靠的

  • 基于hdfs,由hdfs的可靠性保证了hbase的可靠性--即数据可以有多个备份
  • 利用zookeeper实现了HA,即使某一台机器挂掉另外的机器也可以很快的替换它

hbase和hive和传统的关系型数据库的比较

  • 比起传统的关系型数据库,可以存储半结构化非结构化的数据,可以存储和处理更大级别的数据,提供高效的查询,对于稀疏数据的处理更好,具有更好的横向扩展性,免费开源性价比很高。但是不能支持非常好的事务特性,只支持行级的事务。只能通过行键来查询,表设计时难度更高。而mysql用来存储结构化的数据提供更好的事务控制。
  • 比起hive,hive只是在mapreduce上包了一层壳,本质上还是离线数据的处理的工具,实时查询性能有限,本质上是一个基于hadoop的数据仓库工具,不能支持行级别的新增修改和删除。hbase可以提供实时的数据的处理能力,适用于在线数据查询处理,本质上是一种数据库工具。

存储系统三种结构

  • 哈希存储引擎(例如HashMap)

hash存储,hashcode()%num (hash取余)

优点:hbase读写效率都高,也支持增删改随机读取数据。

缺点:存入数据的顺序,会丢失掉。

  • B树存储引擎(例如MySql)

优点:写效率高,读效率高,顺序信息不会丢失

缺点:当数据量很大,性能大幅下降

  • lsm树(例如HBase)

LSM树的设计思想:将对数据的修改增量保持在内存中,最后统一将这些修改操作批量写入磁盘。读取则需要合并磁盘中历史数据和内存中最近修改操作。读取时先读内存,若不存在则访问磁盘。

支持增、删、读、改、顺序扫描操作

牺牲了一部分读的性能换取了高效写入能力

HBase的表设计

  • 列族的设计

在设计hbase表时候,列族不宜过多,越少越好,官方推荐hbase表的列族不宜超过3个。

经常要在一起查询的数据最好放在一个列族中,尽量的减少跨列族的数据访问。

如果有多个列族 多个列族中的数据应该设计的比较均匀。

  • 行键的设计

hbase表行键设计的好坏,直接影响hbase的查询的性能和查询的便利性

行键设计的基本原则
行键必须唯一,必须唯一才能唯一标识数据
行键必须有意义,这样才能方便数据的查询
行键最好是字符串类型,因为数值类型在不同的系统中处理的方式可能不同
行键最好具有固定的长度,不同长度的数据可能会造成自然排序时排序的结果和预期不一致
行键不宜过长,行键最多64KB,但最好是在10~100字节之间,最好不要超过16字节,越短越好,最好是8字节的整数倍。
散列原则
行键的设计将会影响数据在hbase表中的排序方式,这会影响region切分后的结果,要注意,在设计行键时应该让经常要查询的数据分散在不同的region中,防止某一个或某几个regionserver成为热点
有序原则
行键的设计将会影响数据在hbase表中的排序方式,所以一种策略是将经常连续查询的条件作为行键最前面的数据,这样一来可以方便批量查询

你可能感兴趣的:(hbase)