美文网首页
1.4.2HBASE(理论)

1.4.2HBASE(理论)

作者: 寒暄_HX | 来源:发表于2020-03-25 21:49 被阅读0次

    总目录:https://www.jianshu.com/p/e406a9bc93a9

    Hadoop - 子目录:https://www.jianshu.com/p/9428e443b7fd

    HBASE的起源

    自 1970 年以来,关系数据库用于数据存储和维护有关问题的解决方案。大数据的出现后, 好多公司实现处理大数据并从中受益,并开始选择像 Hadoop 的解决方案。Hadoop 使用分 布式文件系统,用于存储大数据,并使用 MapReduce 来处理。Hadoop 擅长于存储各种格式 的庞大的数据,任意的格式甚至非结构化的处理。

    HBASE的定义

    HBASE是一种分布式,可扩展,支持海量数据存储的nosql数据库。

    HBASE的数据模型

    逻辑上,HBASE的逻辑模型和关系型数据库很相似,数据存储在一张表内,有行有列,但对HBASE的底层存储结构(k-v)来看,HBASE更像是一个mutli-dimensional map(多维map)。

    HBASE的逻辑结构

    逻辑结构
    • 首先是row key,相当于数据库的主键,保持唯一。
    • 如果我们存储的数据量过大(行多,理解为高表),HBASE就会把一个表切分成若干个Region,Region是HBASE中的最小逻辑存储单位。
    • 如果我们存储的单条数据量过长(列多,理解为宽表),HBASE会把邻近的一些列存储为列族(ColumnFamily),列族是HBASE中的最小物理存储单位(HBASE存放在hdfs中的文件就是按照列族来划分)。
    • 这样的话,一个Region会被列族切分成很多块,这些块就是store。也就是说Region是由store组成的。

    HBASE的物理存储

    HBASE的物理存储和一张关系型数据库表差不多,但是很有自己的特点。

    物理存储映射

    首先,逻辑表会映射成一个有RK(主键),CF(列族),CQ(字段名),TS(时间戳),Type(put或delete),Value(字段值)。

    我们逻辑存入一些数据后,他们会以一种记录的方式生成物理表,物理表中有一些特殊的字段来表明这个字段值。
    前面三种字段信息在录入时就已经固定了,会发生更改的是后面三个字段。

    例如我们进行一次修改操作,则会添加一行时间戳大于原时间戳的数据,这样hbase在检索的时候,会自动获取CQ对应的TS最大的数据。

    删除操作也一样,不过区别是删除操作生成的行中的type是delete,这样hbase会自动忽略他。(这是逻辑删除,非物理删除)

    物理删除会发生在分表时,分表时会自动删去无意义的数据。

    这种看起来傻乎乎的方式,正式hbase在海量化是已经保持速度的原因。

    HBASE的数据模型

    • Name Space
      HBASE的内存空间,类似于关系型数据库的database概念,每个命名空间下有多个表,HBASE有两个自带的命名空间,一个就叫hbase,是其内置的命名空间;一个叫做default,是用户默认使用的命名空间。

    • Region
      类似于关系型数据库的table概念,不同的是hbase定义表时只需要声明列族即可,不需要声明具体的列。
      这意味着向HBASE写入数据时,字段可以动态,按需指定。因此,和关系型数据库相比,hbase更灵活,更能对应字段变更的场景。

    • Row
      类似于关系型数据库中的行概念。HBASE中的数据由一个RowKey和多个Column组成,数据按照RK的字典顺序排序,并且查询数据时,只能对RK进行检索,所以RK的设计至关重要。

    • Column
      类似于关系型数据库中的字段概念。HBASE中的column是由Column Family和Column Qualifier来限定的,在建表时只需要声明列族即可。

    • Time Stamp
      时间戳,用来标明这一行数据的版本,如果不指定时间戳,则会按照hbase的时间作为默认值。

    • Cell
      是由RK-CF-CQ-TS构成的一个大key值,用来标明value的唯一性。cell是无类型字节码格式。

    HBASE的基础架构

    结构图

    从架构图可以看出来,HBASE是一个master/slaves架构。

    角色

    角色关系图
    外部有三个角色,分别是client,zookeeper还有HMaster。
    • client
      负责通过 PRC 连接到集群。Client 与 Hmaster 交互进行管理类的操作,Client 与 HReginServer 交互进行读写操作。

    • zookeeper
      1.存放整个 HBase集群的元数据以及集群的状态信息。
      2.实现HMaster主从节点的failover。

    • HMaster
      可以启动多个,通过 zookeeper 的Master Election机制保证总有一个Master在运行。它主要是是做一些管理操作,比如:
      1.管理用户对表的增删改查操作
      2.管理 RegionSever 的负载均衡和调整 regins分布。
      3.regins split 之后负责调整新的 region 分布
      4.在 RegionServer 停机之后,负责失效机器上的 Region 迁移。

    内部角色是只有一个HRegionServer,他负责管理所有内部的运作。
    • HRegionServer
      1.存放和管理本地HRegion。
      2.读写HDFS,管理Table中的数据。
      3.Client直接通过HRegionServer读写数据(从HMaster中获取元数据,找到RowKey所在的HRegion/HRegionServer后)。
      4.一个HRegionServer可以存放1000个HRegion。
      5.底层Table数据存储于HDFS中。
      6.HRegion所处理的数据尽量和数据所在的DataNode在一起,实现数据的本地化。
      7.数据本地化并不是总能实现,比如在HRegion移动(如因Split)时,需要等下一次Compact才能继续回到本地化。

    HRS说白了就是用来管理HR的,HR内部发生的操作才是HBASE的核心操作。

    • HRegion
      1.每个HRegion对应Table中一个Region,HRegion由多个HStore组成;
      2.HBase使用RowKey将表水平切割成多个HRegion;
      3.从HMaster的角度,每个HRegion都纪录了它的StartKey和EndKey(第一个HRegion的StartKey为空,最后一个HRegion的EndKey为空);
      4.由于RowKey是排序的,因而Client可以通过HMaster快速的定位每个RowKey在哪个HRegion中;

    因为HRegion是由HStore组成的,然后继续套娃。

    • HStore
      1.HBase存储的核心。由MemStore和StoreFile组成。
      2.MemStore是Sorted Memory Buffer。
      3.每个HStore对应Table中一个Column Family的存储

    MemStore可以理解成是一个缓存区,将写入的数据在完成持久化之前对数据进行排序,sortFile是真正存储在HDFS中的数据文件。

    • MemStore
      1.为了解决如何在持久化到HDFS之前完成排序,然后再快速的顺序写入HDFS的这个问题,HBase将最近接收到的数据缓存在内存中(in Memstore)进行排序。
      2.作为一个内存级缓存,缓存最近增加数据。一种显而易见的场合是,新插入数据总是比老数据频繁使用。
      3.在持久化写入之前,在内存中对Rows/Cells可以做某些优化。比如,当数据的version被设为1的时候,对于某些CF的一些数据,Memstore缓存了数个对该Cell的更新,在写入HFile的时候,仅需要保存一个最新的版本就好了,其他的都可以直接抛弃。
    • StoreFile
      1.是可读的,一旦创建就没有办法修改了,所以之后进来的数据(不管是新增还是更新数据),都会经历内存到写到一个新的 StoreFile 的过程,但是随着 StoreFile 的数量一致积累到一定阈值,此时会触发Compact 操作,即把所有的小文件(StoreFile)里面的数据根据 row key进行版本合并和删除,生成一个大的 StoreFile。
      2.单个StoreFile 的大小超过一定的阈值,会触发 Split 操作,把当前的 Region 等分成两个 Region。
      3.新的两个 Region 会被Hmaster分配到对应的 HRegionServer 上。
      4.在进行分割或者合并时,才会触发物理上的删除与修改。

    我们上面说过,region是由行构成的,所以StoreFile中保存的是一个个的K-V行。

    • HFile
      1.HBase的数据以KeyValue(Cell-Value)的形式顺序的存储在HFile中
      2.在MemStore的Flush过程中生成HFile,由于MemStore中存储的Cell遵循相同的排列顺序,因而Flush过程是顺序写
      3.我们知道磁盘的顺序写性能很高,因为不需要不停的移动磁盘指针。
    而在底层呢,因为数据存储在HDFS中,底层是由DFS client实现的,文件也被保存为一个个的DataNode。

    HBASE表的特点

    1、大:一个表可以有上十亿行,上百万列
    2、面向列:面向列(族)的存储和权限控制,列(簇)独立检索。
    3、稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
    4、无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一 张表中不同的行可以有截然不同的列

    特点 HBASE.png

    图片失真,需要原图可以私我。

    相关文章

      网友评论

          本文标题:1.4.2HBASE(理论)

          本文链接:https://www.haomeiwen.com/subject/gisxuhtx.html