栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hbase数据刷写

Hbase数据刷写

数据刷写 1.触发时机
  • MemStore内存默认是128M,当某个MemStore超过128M就会将其所在 region 的所有 memstore 都会刷写。
    • 如果我们数据增加的很快,哪怕一到128M就刷写数据量还是在增加(数据增加速度大于刷写速度),当MemStore达到128*4=512MB的时候,就会阻止客户端写入数据到该MemStore
  • 当 RegionServer的所有MemStore 占用内存总和大于总内存 *40% *95%的时候,整个RegionServer开始进行刷写
    • 如果达到了 RegionServer 级别的 Flush,当前 RegionServer 的所有写操作将会被阻塞,这个阻塞可能会持续到分钟级别
  • 当 WAL 文件的数量超过 hbase.regionserver.max.logs,region 会按照时间顺序依次进行刷写,直到 WAL 文件数量减小到 hbase.regionserver.max.log 以下(该属性名已经废弃,现无需手动设置,最大值为 32)
    • 数据到达 Region 的时候是先写入 WAL,然后再被写到 Memstore
    • 如果WAL 的数量越来越大,这就意味着 MemStore 中未持久化到磁盘的数据越来越多
    • 当 RS 挂掉的时候,恢复时间将会变得很长,所以有必要在 WAL 到达一定的数量时进行一次刷写操作
  • 自定义刷写的时间间隔,当达到自动刷写的时间,就会触发 memstore flush开始自动刷写
  • 在Shell 中通过执行 flush 命令,手动触发刷写
  • 注意:
    • 以上所有条件触发的刷写操作最后都会检查对应的 HStore 包含的 StoreFiles 文件数是否超过hbase.hstore.blockingStoreFiles 参数配置的个数,默认值是16
    • 如果满足这个条件,那么当前刷写会被推迟到hbase.hstore.blockingWaitTime 参数设置的时间后再刷写
    • 在阻塞刷写的同时,Hbase 还会请求 Compaction 或者Split 操作
2.刷写策略
  • 1.1之前
    • MemStore刷写是Region级别的,列簇不超过三个
      • 就是说,如果要刷写某个 MemStore ,MemStore 所在的 Region 中其他 MemStore 也是会被一起刷写的
  • 2.2之后
    • 1.Region所有的 MemStore都进行刷写
    • 2.设置一个阈值
      • 判断 Region 中每个 MemStore 的使用内存是否大于这个个阀值,大于这个阀值的MemStore 将会被刷写
    • memstore分两类
3.刷写流程
  • prepareFlush 阶段
    • 如果MEM要进行刷写,首先会对MemStore 做 snapshot快照
    • 拍照期间内存的数据会被锁定
      • 这是为了防止刷写过程中更新的数据同时在 snapshot 和 MemStore 中而造成后续处理的困难,所以在刷写期间需要持有 updateLock
      • 但是这将阻塞客户端的写操作,因为拍照时间比较短所以影响一般比较小
  • flushCache 阶段
    • flushCache 阶段
      • 将快照的数据写成一个临时文件
      • 临时文件是存放在对应 Region 文件夹下面的 .tmp 目录里面
    • commit 阶段
      • 将临时文件移到(rename)对应的列族目录下
        • 将临时文件名称正式存储到对应的列簇中
      • 并做一些清理工作,比如删除第一步生成的 snapshot
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/612806.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号