【Hbase】HBase相关知识助你快速入门

文章目录

    • HBase是什么
    • 为什么要有HBase
    • Hbase的优势
    • 特点
    • HBase的表结构
      • 各个节点的作用
      • 各个节点之间的关系

HBase是什么

HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。HBase是一个Hadoop生态圈中的一种数据库, 分布式、可伸缩的、是一个稀疏的、存储海量数据的工具。以谷歌的Bigtable为模型的分布式、版本化、非关系数据库:结构化数据分布式存储系统。Apache HBase在Hadoop和HDFS上提供了类似Bigtable的功能。

为什么要有HBase

  • 随着互联网整个行业的发展,整个数据处理爆炸的年代,换言之我们每天会产生大量的数据,这些数据如果存储到传统的数据库中,已经不能满足我们对数据存储的要求了,所以出现很多分布式的存储介质。当我们需要随机的并且实时的读写海量数据的时候就可以使用HBase。

Hbase的优势

容量巨大

  • HBase 的单表可以有百亿行、百万列,可以在横向和纵向两个维度插入数据,具有很大的弹性。
  • 当关系型数据库的单个表的记录在亿级时,查询和写入的性能都会呈现指数级下降,这种庞大的数据量对传统数据库来说是一种灾难,而 HBase 在限定某个列的情况下对于单表存储百亿甚至更多的数据都没有性能问题。
  • HBase 采用 LSM 树作为内部数据存储结构,这种结构会周期性地将较小文件合并成大文件,以减少对磁盘的访问。

列存储

  • 与很多面向行存储的关系型数据库不同,HBase 是面向列的存储和权限控制的,它里面的每个列是单独存储的,且支持基于列的独立检索。通过下图的例子来看行存储与列存储的区别。
    【Hbase】HBase相关知识助你快速入门_第1张图片
  • 从上图可以看到,行存储里的一张表的数据都放在一起,但在列存储里是按照列分开保存的。在这种情况下,进行数据的插入和更新,行存储会相对容易。而进行行存储时,查询操作需要读取所有的数据,列存储则只需要读取相关列,可以大幅降低系统 I/O 吞吐量。

稀疏性

  • 通常在传统的关系性数据库中,每一列的数据类型是事先定义好的,会占用固定的内存空间,在此情况下,属性值为空(NULL)的列也需要占用存储空间。
  • 在 HBase 中的数据都是以字符串形式存储的,为空的列并不占用存储空间,因此 HBase 的列存储解决了数据稀疏性的问题,在很大程度上节省了存储开销。所以 HBase 通常可以设计成稀疏矩阵,同时这种方式比较接近实际的应用场景。

扩展性强

  • HBase 工作在 HDFS 之上,理所当然地支持分布式表,也继承了 HDFS 的可扩展性。HBase 的扩展是横向的,横向扩展是指在扩展时不需要提升服务器本身的性能,只需添加服务器到现有集群即可。
  • HBase 表根据 Region 大小进行分区,分别存在集群中不同的节点上,当添加新的节点时,集群就重新调整,在新的节点启动 HBase 服务器,动态地实现扩展。这里需要指出,HBase 的扩展是热扩展,即在不停止现有服务的前提下,可以随时添加或者减少节点。

高可靠性

  • HBase 运行在 HDFS 上,HDFS 的多副本存储可以让它在岀现故障时自动恢复,同时 HBase 内部也提供 WAL 和 Replication 机制。
  • WAL(Write-Ahead-Log)预写日志是在 HBase 服务器处理数据插入和删除的过程中用来记录操作内容的日志,保证了数据写入时不会因集群异常而导致写入数据的丢失;而 Replication 机制是基于日志操作来做数据同步的。
  • 当集群中单个节点出现故障时,协调服务组件 ZooKeeper 通知集群的主节点,将故障节点的 HLog 中的日志信息分发到各从节点进行数据恢复。

特点

【Hbase】HBase相关知识助你快速入门_第2张图片
HBase的内部结构
【Hbase】HBase相关知识助你快速入门_第3张图片

HBase的表结构

各个节点的作用

Client : hbase客户端

  • 1.包含访问hbase的接口。比如,linux shell,java api。
  • 2.除此之外,它会维护缓存来加速访问hbase的速度。比如region的位置信息。

Zookeeper

  • 1.监控Hmaster的状态,保证有且仅有一个活跃的Hmaster。达到高可用。
  • 2.它可以存储所有region的寻址入口。如:root表在哪一台服务器上。
  • 3.实时监控HregionServer的状态,感知HRegionServer的上下线信息,并实时通知给Hmaster。
  • 4.存储hbase的部分元数据。

HMaster

  • 1.为HRegionServer分配Region(新建表等)。
  • 2.负责HRegionServer的负载均衡。
  • 3.负责Region的重新分配(HRegionServer宕机之后的Region分配,HRegion裂变:当Region过大之后的拆分)。
  • 4.Hdfs上的垃圾回收。
  • 5.处理schema的更新请求

HRegionServer

  • 1.维护HMaster分配给的Region(管理本机的Region)。
  • 2.处理client对这些region的读写请求,并和HDFS进行交互。
  • 3.负责切分在运行过程中组件变大的Region。

HLog

  • 1.对HBase的操作进行记录,使用WAL写数据,优先写入log(put操作:先写日志再写memstore,这样可以防止数据丢失,即使丢失也可以回滚)。

HRegion

  • 1.HBase中分布式存储和负载均衡的最小单元,它是表或者表的一部分。

Store

  • 1.相当于一个列簇

Memstore

  • 1.内存缓冲区,用于将数据批量刷新到hdfs中,默认大小为128M

StoreFile

  • 1.和HFile概念意义,不过是一个逻辑概念。HBase中的数据是以HFile存储在Hdfs上。

各个节点之间的关系

HMaster:HRegionServer : 1=*
HRegionServer:HRegion : 1=*
HRegionServer:HLog : 1=1
HRegion:Store : 1=*
Store:Memstore : 1=1
Memstore:HStoreFile : 1=*
StoreFile:HFile : 1=1

你知道的越多,你不知道的越多。
有道无术,术尚可求,有术无道,止于术。
如有其它问题,欢迎大家留言,我们一起讨论,一起学习,一起进步

你可能感兴趣的:(大数据学习)