天天看点

OpenTSDB基础概念、HBase的介绍OpenTSDB的基础概念HBase的介绍

OpenTSDB基础概念、HBase的介绍

  • OpenTSDB的基础概念
  • HBase的介绍
    • HBase的存储
      • HBase的逻辑存储
      • HBase的物理存储
    • HBase的整体架构
    • HBase特殊表
    • HBase自定义表
    • HBase读取数据流程
    • HRegion中的核心组件

OpenTSDB的基础概念

  • metric:时序数据的指标名称,一般不适用中文,而使用简短、类似变量的名称。
  • timestamp:表示一条时序数据中点对应的具体时间,可以是秒级或毫秒级的UNIX时间戳。
  • tags:一个或多个标签(tag)组合,主要描述metric的不同维度。一个tag由<tagk, tagv>组成,tagk指定了某个维度,tagv是该维度的值。方便从不同的维度进行聚合。
  • value:表示一条时序数据中某个timestamp对应的那个点的值。

HBase的介绍

HBase是一款分布式列存储系统,其底层依赖HDFS分布式文件系统。HBase是Apache Hadoop生态系统中的重要一员,其架构是参考Google BigTable模型开发的,本质上是一个典型的KV存储,适用于海量结构化数据的存储。HBase相较于传统的关系型数据库有如下有点:

  • HBase是菌群部署的,横向扩展方便。
  • HBase的容错性能高,这也是得益于其集群部署的特点,并且相同的数据会复制多份,存放到不同的节点上。
  • 相同条件下,HBase支持的数据量级远超传统关系型数据库。
  • HBase的吞吐量较高,尤其是写入能力,远超传统关系型数据库。

HBase不适用的场景:

  • 需要全面事务支持的场景。传统数据库支持多行、多表的事务,而HBase只支持单行的事务。
  • 传统关系型数据库支持SQL语句查询方式,非常灵活,而HBase只能通过RowKey进行查询或扫描。

HBase的存储

HBase的逻辑存储

OpenTSDB基础概念、HBase的介绍OpenTSDB的基础概念HBase的介绍

由上图可以看出,HBase 将数据按照表、行、列的形式进行存储,且存储的数据可以非常稀疏。

  • 列族(Column Family):HBase表中可以有对个,但是需要在建表时明确指出,且后续不能自动增加。
  • 列(Column):一个列族下有多个列,列的个数不用在建表时指明,可以随时添加。
  • 数据是按照RowKey进行排序。
  • 行和列的交叉点成为Cell,每个Cell都有一个版本号(Version Number),默认值是UNIX时间戳,也可以自定义。

HBase的物理存储

OpenTSDB基础概念、HBase的介绍OpenTSDB的基础概念HBase的介绍

由上图可以看出,HBase为每个列族创建了一个单独文件,即HFile文件。每个HFile文件以<K, V>方式存储,其中Key为RowKey+Column Family+Column,value为具体数据。

HBase的整体架构

HBase集群的架构为主从结构,由 ZooKeeper、HMaster、HRegionServer 三类组件构成。

ZooKeeper、HMaster、HRegionServer的作用:

  • Zookeeper:HMaster、HRegionServer等组件向其注册,并保存状态信息到Zookeeper对应的临时节点上,并决定HMaster的主节点。
  • HMaster:HMaster竞争创建临时节点,HBase集群只保证一个HMaster节点,其他的作为备用;当主HMaster宕机时,Zookeeper清理器临时节点,备用节点监听到后,会在Zookeeper上成功创建相应的临时节点并成为主HMaster节点。
    • HMaster 节点主要负责 HBase 表和 HRegin 的管理工作,具体如下
      • 管理用户对 HBase 表的增删改查,参与查询的部分过程。
      • 将 HRegin 均衡地分布到集群中的 HReginServer 上,当 HRegin 分裂之后,也需要调整其分布。
      • 在 HRegionServer 停机后,负责将失效的 HRegion 拆迁到其他 HRegionServer 上。
  • HRegionServer:在Zookeeper中创建一个临时节点,HMaster节点会监控这些临时节点来确定HRegionServer是否正常可用,一旦不可用,HMaster会进行一些补救措施,以保证上层应用不受影响。例如:将宕机HRegionServer上的HRegion进行迁移。

HBase特殊表

HBase的两张特殊表,ROOT表、META表。

  • ROOT表:保存META表的位置,主要特点是ROOT表不能分割,永远只存在一个 HRegion。
  • META表:记录的所有HRegion的位置。由于HBase中所有HRegion的元数据都被存储在META表中;随着Region的不断增多,META表中的数据也增加,并分裂成多个新的HRegion。为了调高访问效率,客户端一般会缓存所有已知的ROOT表和META表。

HBase自定义表

自定表会按照RowKey被切分成若干块,每块是一个HRegion。每个HRegion中存储着从startKey到endKey的记录。这些HRegion会被分到集群的各个数据节点(HRegionServer)中存储。

HBase读取数据流程

  1. 客户端首先会通过访问Zookeeper查找ROOT表的地址。
  2. 客户端访问ROOT表获取相应的META表信息。
  3. 客户端查询META表定位待查询RowKey分布在哪个HRegionServer上,同时缓存HRegionServer信息。
  4. 客户端访问相应的HRegionServer,读取数据。

HBase写入数据的流程与读取类似,也需要先查找ROOT表和META表来确定写入的HRegion所在的HRegionServer,最终请求HRegionServer完成数据写入。

HRegion中的核心组件

  • HLog:是HBase对WAL(Write Ahead Log)日志的实现,即是一个存储底层HDFS的日志文件。HLog日志用来记录那些还没有被刷新到硬盘上的数据,当HRegionServer收到客户端的写入请求时,会先在HLog中记录一下,然后进行后续的写入操作。这样做是为了数据恢复,例如意外宕机,在HBase重启之后,利用HLog就可以将未刷新到硬盘得数据恢复,在传统关系型数据库中也有类似的实现。
  • BlockCache:是HRegionServer中的读缓存,其中记录了经常被读取的数据,默认使用LRU算法淘汰缓存数据。
  • MemStore:是HRegionServer中的写缓存,其中记录了没有被刷新到硬盘的数据。每个列族对应一个MemStore,并且MemStore中的数据都是按照RowKey排序的。
  • StoreFile:每次将MemStore刷新到磁盘时,都会生成一个对应的HFile文件,而StoreFile则是HBase对HFile的简单封装。在HFile中会按照KV方式存储数据。
OpenTSDB基础概念、HBase的介绍OpenTSDB的基础概念HBase的介绍

继续阅读