Warning: mkdir(): No space left on device in /data/discuz/upload/source/class/class_core.php on line 91
Hbase的刷写、合并与分片-Hbase,的,刷写,、,合并-IT技术擎-最棒的IT web技术交流社区-( it.techqing.com)
设为首页收藏本站

IT技术擎 - 最棒的IT web技术交流社区

 找回密码
 注册为IT技术擎人

QQ登录

只需一步,快速开始

搜索
热搜: php h5 jquery
查看: 20|回复: 0

[未分类] Hbase的刷写、合并与分片

[复制链接]
发表于 2020-2-26 21:00:17 | 显示全部楼层 |阅读模式

文章目录
    • 一、前言
    • 二、Hbase的刷写合并与分片
      • 1.刷写
        • MemStore 刷写时机
      • 2.合并
      • 3.分片
        • Region Split 时机

一、前言

​ 在上一次的Hbase的分享中我们主要了解了Hbase的系统结构、各组件、读写流程(HBase的系统结构与读写流程);在本次我们将继续深入了解Hbase的刷写与合并。下面进入正题。

二、Hbase的刷写合并与分片
1.刷写

​ MemStore 的刷写也叫做Flush也有人称之为随机写,它是在经过客户端操作数据存储在MemStore 之后,当满足一些特定条件时,将MemStore 中的数据转换成storefile(Hfile)存储到文件系统(磁盘)的过程。MemStore 刷写时机
以下选项均可以在hbase-site.xml的文件中进行配置。
1:).当某个 memstroe 的大小达到了
  1. hbase.hregion.memstore.flush.size
复制代码
(默认值 128M ),
其所在 region 的所有 memstore 都会刷写。当 memstore 的大小达到了
  1. hbase.hregion.memstore.flush.size (默认值 128M )* hbase.hregion.memstore.block.multiplier (默认值 4 )时
复制代码
会阻止继续往该 memstore 写数据。
2:).当 region server 中 memstore 的总大小达到
  1. java_heapsize * hbase.regionserver.global.memstore.size (默认值 0.4 )
  2. * hbase.regionserver.global.memstore.size.lower.limit (默认值 0.95 ),
复制代码
region 会按照其所有 memstore 的大小顺序(由大到小)依次进行刷写。直到 region server中所有 memstore 的总大小减小到上述值以下。当 region server 中 memstore 的总大小达到
  1. java_heapsize * hbase.regionserver.global.memstore.size (默认值 0.4 )
复制代码
时,会阻止继续往所有的 memstore 写数据。
3:).到达自动刷写的时间,也会触发 memstore flush。自动刷新的时间间隔由该属性进行
配置
  1. hbase.regionserver.optionalcacheflushinterval
复制代码
(默认 1 小时)。
4:).当 WAL 文件的数量超过
  1. hbase.regionserver.max.logs
复制代码
,region 会按照时间顺序依次进
行刷写,直到 WAL 文件数量减小到
  1. hbase.regionserver.max.log
复制代码
以下(该属性名已经废弃,
现无需手动设置,最大值为 32,我在hbase1.3.1的配置文件中没有找到这个属性)。2.合并

​ hfile的合并官方称之为StoreFile Compaction。MemStore 的刷写每次都会形成一个新的Hfile文件,而且同一个字段的不同版本和不同类型有可能分布在不同的Hfile中。所以查询时会循环所有的hfile文件。为了减少小文件的个数,以及清理掉过期和删除的数据,要进行合并。
​ Compaction分为两种。一种是Minor Compaction,它会将多个hfile文件合并为一个大的hfile,但是不会清理过期和删除的数据(特殊情况:合并的hfile文件大于等于3个时,也会触发一次Major Compaction)。另一种是 Major Compaction,它会将一个Store下的所有hfile合并成一个大的hfile,并且会清理过期和删除的数据。3.分片

​ 分片也称之为Region Split。默认情况下,每个 Table 起初只有一个 Region,随着数据的不断写入,Region 会自动进行拆分。刚拆分时,两个子 Region 都位于当前的 Region Server,但处于负载均衡的考虑,
HMaster 有可能会将某个 Region 转移给其他的 Region Server。Region Split 时机

  • 当1个region中的某个Store下所有StoreFile的总大小超过
    1. hbase.hregion.max.filesize
    复制代码

    该 Region 就会进行拆分(0.94 版本之前)。
  • 当 1 个 region 中 的某 个 Store 下所有 StoreFile 的总 大 小超过
    1. Min(R^2 *
    复制代码
    1. "hbase.hregion.memstore.flush.size",hbase.hregion.max.filesize")
    复制代码
    ,hbase.hregion.max.filesize默认是10g;该 Region 就会进行拆分,其中 R 为当前 Region Server 中属于该 Table 的个数(0.94 版本之后)。**注意:**注意这里有个坑默认的这种情况有些时候可能引发region的数据倾斜,所以强烈建议建表时使用预分区操作。

  • 点赞 1  

  • 收藏

  • 分享


    • 文章举报
  
清风竹雨发布了31 篇原创文章· 获赞 40· 访问量 7283 私信 关注



上一篇:Python:流程控制
下一篇:如何向SQL Server 2008中导入外部数据库文件
该用户未在地球留下任何的痕迹

本版积分规则

QQ|小黑屋|帮助|IT技术擎 ( 沪ICP备15054863号  

GMT+8, 2020-4-11 01:55

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表