分析&回答


HBase 基本特点

  1. HBase是一个分布式的、面向列的开源数据库存储系统,具有高可靠性高性能可伸缩性,它可以处理分布在数千台通用服务器上的PB级的海量数据。
  2. HBase不同于一般的关系型数据库,它是一个适合于非结构化数据存储的数据库。HBase不限制存储的数据的种类,允许动态的、灵活的数据模型。
  3. BigTable的底层是通过GFS来存储数据,而HBase对应的则是通过HDFS(Hadoop分布式文件系统)来存储数据的。
  4. hbase是主从架构。hmaster作为主节点,hregionserver作为从节点。
  5. 基于的表包含rowkey,时间戳,和列族。新写入数据时,时间戳更新,同时可以查询到以前的版本.
  6. Hbase为null的记录不会被存储.
  7. 多版本号数据,依据Row key和Column key定位到的Value能够有随意数量的版本号值,因此对于须要存储变动历史记录的数据,用HBase是很方便的。比方某个用户的Address变更,用户的Address变更记录也许也是具有研究意义的。

HBase 系统架构图

image.png

HBase 数据模型

image.png

组成部件说明:

  • Row Key:     Table主键 行键 Table中记录按照Row Key排序
  • Timestamp:   每次对数据操作对应的时间戳,也即数据的version number
  • Column Family:  列簇,一个table在水平方向有一个或者多个列簇,列簇可由任意多个Column组成,列簇支持动态扩展,无须预定义数量及类型,二进制存储,用户需自行进行类型转换

Table&Region

image.png

  • Table随着记录增多不断变大,会自动分裂成多份Splits,成为Regions
  • 一个region由[startkey,endkey)表示
  • 不同region会被Master分配给相应的RegionServer进行管理

两张特殊表:-ROOT- & .META.

image.png

  • .META.   记录用户表的Region信息,同时,.META.也可以有多个region
  • -ROOT-   记录.META.表的Region信息,但是,-ROOT-只有一个region
  • Zookeeper中记录了-ROOT-表的location
  • 客户端访问数据的流程:
  • Client -> Zookeeper -> -ROOT- -> .META. -> 用户数据表
  • 多次网络操作,不过client端有cache缓存

反思&扩展


HBase与传统关系型数据库(如MySQL)的区别

  • 数据类型:没有数据类型,都是字节数组(有一个工具类Bytes,将java对象序列化为字节数组)。
  • 数据操作:HBase只有很简单的插入、查询、删除、清空等操作,表和表之间是分离的,没有复杂的表和表之间的关系,而传统数据库通常有各式各样的函数和连接操作。
  • 存储模式:Hbase适合于非结构化数据存储,基于列存储而不是行。
  • 数据维护:HBase的更新操作不应该叫更新,它实际上是插入了新的数据,而传统数据库是替换修改
  • 时间版本:Hbase数据写入cell时,还会附带时间戳,默认为数据写入时RegionServer的时间,但是也可以指定一个不同的时间。数据可以有多个版本。
  • 可伸缩性,Hbase这类分布式数据库就是为了这个目的而开发出来的,所以它能够轻松增加或减少硬件的数量,并且对错误的兼容性比较高。而传统数据库通常需要增加中间层才能实现类似的功能

喵呜面试助手: 一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐