1.4.2HBASE(理论)

总目录:https://blog.csdn.net/qq_41106844/article/details/105553392

Hadoop - 子目录:https://blog.csdn.net/qq_41106844/article/details/105553369

 

HBASE的起源

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

HBASE的定义

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

HBASE的数据模型

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

HBASE的逻辑结构

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

HBASE的物理存储

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

 
20155953-17b32ad124275c81.png
物理存储映射

 

首先,逻辑表会映射成一个有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的基础架构

 
20155953-af120b4ef5bc7be0.png
结构图

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

角色

 
20155953-19c10f5d3daf7153.png
角色关系图

外部有三个角色,分别是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、无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一 张表中不同的行可以有截然不同的列

 
20155953-0c47fb195c667879.png
特点
 
20155953-d76f8ee5ceb49e7d.png
HBASE.png

 

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒 暄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值