博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HBase 笔记3
阅读量:5971 次
发布时间:2019-06-19

本文共 2402 字,大约阅读时间需要 8 分钟。

 

 

 

数据模型

Namespace 表命名空间: 多个表分到一个组进行统一的管理,需要用到表命名空间

  表命名空间主要是对表分组,对不同组进行不同环境设定,如配额管理  安全管理

  保留表空间: HBase中有2个保留表空间是预先定义

    HBase 系统表空间,用于HBase内部表

    default: 哪些没有定义表空间的表都被分配到这个下面

Table 表:由一个或多个列族组成

Row 行:一行包含多个列,这些列通过列族分类

ColumnFamily 列族:列族是多个列的集合

Column Qualifier列: 多个列组成一行,列可以随意定义的,一个行中的列不限名字,不限数量,只限定列族

cell 单元格: 一个列中可以存储多个版本的数据,每个版本称为一个单元格cell

Timestamp 时间戳:也可以称为版本号

 

 

 HBase存储数据

 

 Master: 负责启动的时候分配Region到具体的Region Server,执行各种管理操作,如Region的分割和合并

RegionServer:一个Region Server上存在一个或多个Region,就是多个Region的集合

Region: 表的一部分数据,HBase是一个自动分片的数据库,一个Region相当于关系型数据库中分区表的一个分区,每个region都有其实起始rowkey和结束rowkey

HDFS:Hadoop一部分,HBASE与HDFS交互,HDFS是真正承载数据库的载体

Zookeeper:第三方组件,不属于HBase。client需要读取的元数据表hbase:meta位置存在zookeeper上

 

当操作到达Region时,HBase会把操作写入WAL(预写日志)中,同时数据存在基于内存的Memstore里,待达到一定数据量,刷写flush 到最终存储HFile

  故障恢复时,使用WAL可以恢复数据

Store:每个region中包含多个Store实例,一个Store对应一个列组的数据

memstore: 由于HDFS上文件不可修改, 数据会在memstore中整理成LSM树(顺序存储),之后刷写到HFile中,提高读取效率

    读取数据时先读取blockcache,再读取HFile+memstore

  

WAL 预写日志是解决宕机之后的恢复问题

数据到达Region时先写入WAL,然后再加载到memstore中,WAL中数据存储再HDFS上,不会丢失

 

关闭/打开WAL

异步的同步WAL

   HBase间隔多久会把操作从内存写入WAL,默认1s

HFile由一个一个块组成,再HBase中一个块默认64KB,由列族上BLOCKSIZE属性定义

Data:数据块    存储HBase表中的数据

Meta: 元数据快  存储该HFile文件的元数据信息

FileInfo 文件信息,时HFile的必要组成部分,存储这个文件的信息,如最后一个Key,平均Key的长度

DataIndex  存储Data块索引信息的块文件么就是Data块的偏移值

MetaIndex : 存储Meta块索引信息的块文件

Trailer 必选,存储FileInfo DataIndex MetaIndex 块的偏移值'

 

 Data数据块的第一位存储的是块的类型,后面存储的是多个keyvalue键值对,也就是单元格cell的实现类

cell是一个接口,keyvalue是实现类

Row 行键   CF 列族  Col 列  TimeStamp 时间戳  

 

增删改查真面目:

HBase的增删改查实际都是新增操作:

新增单元格时,HBase在HDFS上新增一条数据

修改一个单元格时,HBase在HDFS上又新增一条数据,只是版本号比之前的大

删除一个单元格时,HBase还是新增数据,只是数据没有value,类型为delete,并打上墓碑标记

  数据真正删除时是HFile合并时,忽略墓碑标记的数据,完成删除

 数据写入

 

 

数据发出的第一时间被写入WAL,随后数据会立即被放入memstore中整理,最后当memstore太大达到阈值后,Flush到存储在硬盘上的HFile文件

 数据读取

HBase 的scan操作会读取行键中的所有值,这样才能确定返回哪些数据(数据和墓碑标记不是存放在一起的)

 在Scan时store会创建store scanner实例把么么store和hfile结合起来扫描,storescanner打开时,会先定位起始行键startRow上,开始往下扫描

 

Region定位:

.META 元数据表,存储了所有的Region信息,一行记录就是一个Region,记录了Region的起始行,结束行,和该Region的连接信息,这样client可以通过这个来判断需要的数据在哪个region上

-ROOT- 存储.META.的表的表 ,即存储了.Meta.在什么Region上的信息

1)用户通过查找zookeeper上的/hbase/root-region-server节点获取-ROOT-表在哪个Region Server上

2)访问-ROOt-表,看数据在哪个.Meta.表上,这个表在哪个Region Server上

3)访问.Meta.表查询行键在哪个region里

4)连接具体数据所在的Region Server上,使用scan遍历row

 

 从0.96版本之后,三层查询架构改成二层,-ROOT-去掉,.Meta.表所在的region server信息存储在ZK中的/hbase/meta-region-server中,再后来引入namespace,.Meta.表修改为hbase:meta

 

转载于:https://www.cnblogs.com/zy1234567/p/10316453.html

你可能感兴趣的文章
iOS - OC 语言新特性
查看>>
基于Token的WEB后台认证机制
查看>>
jinfo_动态调整JVM参数(无需重启)(实践)
查看>>
[MODx] Build a CMP (Custom manager page) using MIGX in MODX 2.3 -- 2
查看>>
uiimageview 异步加载图片
查看>>
屏幕录像专家注册机破解方法
查看>>
SPIE Example References
查看>>
2015阿里巴巴秋招在线笔试题
查看>>
前缀式计算(前缀表达式)
查看>>
poj2728 Desert King --- 01分数规划 二分水果。。
查看>>
iOS边练边学--介绍布局的三种方法
查看>>
[React] React Router: Nested Routes
查看>>
android: 播放视频
查看>>
Redis 学习(一)
查看>>
Terraform入门 - 3. 变更基础设施
查看>>
前端开发模式--MV*
查看>>
PAT A1048 二分/two points
查看>>
Python2+Selenium入门05-关于WebElement类
查看>>
后端_ThinkPHP5
查看>>
JS中数据类型、内置对象、包装类型对象、typeof关系
查看>>