Hbase

store 一个表中一个列对应一个store 分memstore(基于内存存放数据,每个memstore分配128m空间)和

storefile:是文件的硬盘存储,直接存储到HDFS 存入后被称为HFile

HLog HBase的日志机制 日志会存储在HDFS,在任何操作之前先记录到HDFS 所有的日志都是记录在一起的

HRegionserver只有一个Log文档

zookeeper HBase协调服务 1主备的选举和切换 保证集群只有一个Master 存储Hbase的元数据信息 记录当前集群存储的信息

HMaster Hbase的主节点

读写流程

公共流程 定位资源 定位RowKey对应RegionServer

0.96之前首先系统维护了两张表 -root-(一张普通的表但是由Hbase自己维护,记录meta存放位置) -meta-

认为ROOT表中只需要一个Region即可

系统只维护meta

Meta的位置由zookeeper维护

定位RowKey对应RegionServer

读取数据的流程

·寻址 -->RegionServer:node02

·开始和RegionServer建立连接 BlocaCache

这是每个RegionServer内部共享的一个一块区域

·构建RegionScanner 优先从MemStore(内存)读取数据如果找不到就去StoreFile总查找

但Storefile有很多个 内部有序 ,外部无序

·构建StoreScanner

·MemStoreScanner StoreFileScanner

Hbase写入流程

·寻址 RowKey对应的RegionServer node03:16020

·RegionServer 首先将DML的操作写入到日志 日志Hlog 再写入到MenStore CF(列族)

·MenStore 监听器监听Menstore(判断阈值128M)写入HDFS

snapshot 快照MenStoreOld

数据刷写时机

(1)内存占用达到512M(128*4)阻塞客户端的写入

(2)总内存*40%*95%整个RegionServer开始进行刷写

(3)Wal日志的阈值大小 插入数据--删除数据

(4)自定义刷写时间间隔

(5)命令的刷写

刷写的策略

1.1之前Memstore刷写 只要有一个写满了所有都会刷写(列族不要超过三个)

2.2之后Region中所有Mem都进行刷写 设置一个阈值 mem分两类

数据合并(数据刷写)

合并的时机

Menstore Flush Store的StoreFile文件进行判断 判断是否达合并的阈值(文件数量超过10个)

周期性的检测 默认定义一个合并的周期10000s 如果达到阈值也会检查文件数目 如果文件数目超过三个 ---》小合并 不超过3个-->检查最早的一次合并的时间--》如果超过7天会进行大合并

手动触发

合并的方式

minor(小型)选取一些小的,相邻的StoreFile将他们合并成一个更大StoreFile,仅仅只是合并,但是会处理TTL的数据

major(大型)将所有的StoreFile合并成StoreFile 清理三类无意义数据,被删除的数据,TTL过期数据 ,版本号超过设定版本的数据

合并的策略

选择进程

数据切分

当Region达到阈值时就会开始切分

切分原因 数据分配不均匀 compaction消耗严重 单点压力 读写性能 合并困难

切分时机 每次数据合并后发起一个requestSplit然后开始检查文件大小 10G

切分策略

·寻找切分点

·先找最大的Store然后再找最大的StoreFile,再找中心点的rowkey

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值