hadoop学习笔记(五)HBase的原理及概念模型
数据模型
Hbase采用表来组织数据,采用行和列,行为行键,列为列族
通过{“行键”,“列族” ,“列限定符”,“时间戳”}来确定一个单元格。
概念模型
- 行键按照字典序列进行排序
- 用列anchor:cnnsi.com , anchor:my.look.ca或者contents:html来标识列
- 从逻辑上讲,这是一个稀疏的映射关系表
物理模型
具体的物理存储采用了基于列的存储方式,会按照列族的不同分别存放两个片段,分成contents和anchor,列族中还包括时间戳和行键。
逻辑上是空的地方不会单独用null存储,而是根本就不会被存储,也不会用null这个东西占据空间。
Hbase的实现原理
图4-5:
- 表中的每一条数据是根据行键字典序列维护
- 根据行键对表中每一条数据进行分区,分区被称作Region,是在分布式集群上分发的基本单位,分发到运行Region服务器的机器上
图4-6:
-最初表中的只有一个Region,随着数据的不断插入,基于行键对数据进行分区的Region就会不断增大,在Region大小到达一个阀值的时候分裂成同等大小,实际的分裂过程是在Region服务器中进行的
大约的分布过程如下,Region存在Region服务器上
Region三级寻址
每一个Region都有唯一标识性,总体的三级寻址类似B+树
- .META.是Region和Region服务器的对应关系表,又是元数据表,直到Region存放在那里
- 映射关系多,.META.表也会被分成Region存在各个不同服务器上,-ROOT-表就是根数据表,用来存放.META.的Region的映射关系,-ROOT-只有一个Region,永远不会被划分
- Zookkeeper文件记录了-ROOT-表的位置信息
通过三级寻址发现:
用户表Region个数 = -ROOT-表的映射关系个数 *. META.表的映射关系个数
Hbase运行的系统架构
- 客户端表现形式为shell,也可自己写客户端,HBase提供了API,也是通过RPC这种远程访问机制对Mater进行访问,数据库的读写也是通过RPC与Region服务器进行交互
- ZooKeeper就是对集群中机器进行管理,也并非是单一的机器,也是集群,图中是一个ZooKeeper集群概述,反映每台机器的运行状态或者是增加集群需要同通知ZooKeeper,Hbase内置了ZooKeeper。而且还保存了-ROOT-表地址和Master地址,用来进行三级寻址和访问Mater实现操作
- Master主要是管理一些修改表的操作,负载均衡(有些Region服务器Region多,有些Region服务器Region少)
- Region服务服务器以HDFS作为底层来进行存储,具有副本功能,Hbase不具备副本功能
Region服务器原理
-
多个不同的Region放在一台Region服务器上
-
一个Region中列族通过Store存储,Store由MemStore和StoreFile
-
MemStore是缓存,StoreFile是磁盘文件,先写入缓存,缓存满了,在写入磁盘空间,HFile就是StoreFIle的实现方式,Region会向整个HDFS系统去读写数据,所以安装hbase和配置hbase的时候需要配置参数,修改hbase.rootdir,指定Hbase的Master在NameNode运行的机器上,让HBase数据在HDFS集群上
启动HBase前需要设置属性hbase.rootdir,用于指定HBase数据的存储位置 -
HLog就是日志,必须先写入日志才能够写入MemStore缓存
用户读写数据过程:
- 数据会先写进日志HLog,然后写入缓存MemStore
- 缓存刷新:缓存有大小,会周期性的将缓存内容写入磁盘的StoreFile,并向HLog文件打一个标记表示缓存内容已经写入磁盘StoreFile文件中,来证明MemStore内容对应的HLog日志内容写入磁盘StoreFile,晴空缓存。每一个的缓存刷新都会生成一个StoreFile
- SoreFile越来越多就会发生合并,到达阈值,就会发生分裂,这个时候对应的Region就会被分成两个Region
读过程:
- 先找缓存
- 缓存找不到就去StoreFile去找相关数据
本文地址:https://blog.csdn.net/liutao43/article/details/107372396
上一篇: 什么样的内容选题,更容易引发传播