Hbase split Region

这篇具有很好参考价值的文章主要介绍了Hbase split Region。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Split(Region拆分)

自动拆分
根据region大小触发拆分

​ 早期(0.94版本前)HBase仅根据Region中最大的列簇大小(即一个Store,也即HFile)进行自动拆分,默认拆分阈值为10G,当大小达到10G后,将这个region拆分为两个region。参数为:

hbase.hregion.max.filesize
根据文件大小动态触发拆分

​ 0.94版本之后,有了IncreasingToUpperBoundRegionSplitPolicy策略。即动态限制region大小上限策略。这也是默认的触发方式。

当region数量较少时,触发切分的阈值也较低,随着region数量提升,触发拆分的阈值也随之提升,但不会超过一个限定的值。

当region的数量在0~100之间,则根据以下公式计算触发拆分的阈值:

Math.min( region数量 ^ 3 * 初始大小, 默认最大文件大小  )


#初始大小: 由hbase.increasing.policy.initial.size参数控制,如果没有设置的话,则用memstore的刷写大小的2倍,即hbase.hregion.memstore.flush.size * 2。
#默认最大文件大小: 由hbase.hregion.max.filesize参数控制,即Region最大大小。

例子:

假如hbase.hregion.memstore.flush.size定义为128MB,那么文件大小的上限增长将是这样:
(1)刚开始只有一个文件的时候,上限是256MB,因为1^3 * 1282 = 256MB。
(2)当有2个文件的时候,上限是2GB,因为2^3 * 128
2 = 2048MB。
(3)当有3个文件的时候,上限是6.75GB,因为3^3 * 128 * 2 = 6912MB。
(4)以此类推,直到计算出来的上限达到hbase.hregion.max.filesize region所定义的10GB。

Region大小上限的增加如图:当Region个数达到4个的时候由于计算出来的上限已经达到了16GB大于10GB了,所以后面当Region数量再增加的时候文件大小上限已经不会增加了。在最新的版本里IncreasingToUpperBoundRegionSplitPolicy是默认的配置。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HbJgtwsG-1689926911187)(md_photo_file/NoteBook/image-20230721154630826.png)]

以长度自定义拆分前缀

​ KeyPrefixRegionSplitPolicy 是IncreasingToUpperBoundRegionSplitPolicy的子类。在以文件大小触发region拆分的基础上,可以在拆分时根据rowkey的前缀进行拆分。

​ 如:某个region内包含两种前缀的rowkey,分别为:cn001cn999和us001us999。当触发了对这个region的拆分时,可能前缀为cn的数据中列较多,数据大小更大,按照默认的拆分方式,将这个region按照文件大小平均拆分成两份,则可能有部分前缀为cn的rowkey会和前缀为us的rowkey被放在同一个新的region,如图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GeXzO1o8-1689926911188)(md_photo_file/NoteBook/image-20230721155900261.png)]

当使用KeyPrefixRegionSplitPolicy的方式拆分,则结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PrcTI01H-1689926911188)(md_photo_file/NoteBook/image-20230721155916631.png)]

KeyPrefixRegionSplitPolicy可以保证相同前缀的rowkey不会被拆分到两个不同的Region里面。通过以下参数来指定rowkey前几个字符为前缀:

KeyPrefixRegionSplitPolicy.prefix_length


这个策略适用的场景是:
	1. 数据有多种前缀。
	2. 查询多是针对前缀,比较少跨越多个前缀来查询数据。
以分隔符自定义拆分前缀

​ DelimitedKeyPrefixRegionSplitPolicy与上面的KeyPrefixRegionSplitPolicy方式相同,都是在以文件大小为触发拆分的基础上根据rowkey前缀进行拆分。区别在于,KeyPrefixRegionSplitPolicy是以字符串长度指定前缀,而DelimitedKeyPrefixRegionSplitPolicy是以分隔符区分前缀,书中举例:如果以服务器的名字来当前缀,有的服务器叫host12有的叫host1,甚至有的服务器较host101。那么以字符串长度就难以区分各服务器名。

但是可以通过如下参数定义前缀分隔符:比如定义了前缀分隔符为_,那么host1_001和host12_999的前缀就分别是host1和host12。

DelimitedKeyPrefixRegionSplitPolicy.delimiter
热点region拆分策略

​ 上述几种都是根据文件大小为触发条件进行region拆分。但是,假如两个大小相同的region,且都远没有达到触发拆分条件的文件大小,而其中一个region由于包含较多的热点rowkey,导致这个region的访问量远大于另一个region,已经不堪重负,但是region大小离触发拆分条件还遥遥无期,拆分这个region已迫在眉睫。

BusyRegionSplitPolicy就是为了解决这种场景而产生的。

BusyRegionSplitPolicy策略通过以下参数判断哪些region为热点region:

hbase.busy.policy.blockedRequests:请求阻塞率,即请求被阻塞的严重程度。取值范围是0.0~1.0,默认是0.2,即20%的请求被阻塞的意思。

hbase.busy.policy.minAge:拆分最小年龄,当Region的年龄比这个小的时候不拆分,这是为了防止在判断是否要拆分的时候出现了短时间的访问频率波峰,结果没必要拆分的Region被拆分了,因为短时间的波峰会很快地降回到正常水平。单位毫秒,默认值是600000,即10分钟。

hbase.busy.policy.aggWindow:计算是否繁忙的时间窗口,单位毫秒,默认值是300000,即5分钟。用以控制计算的频率。

判断Region是否属于热点region的逻辑如下:

​ 如果“当前时间–上次检测时间>=hbase.busy.policy.aggWindow”,则进行如下计算:这段时间被阻塞的请求/这段时间的总请求 = 请求的被阻塞率(aggBlockedRate),如果“aggBlockedRate >hbase.busy.policy.blockedRequests”,则判断该Region为热点region。

禁止拆分region

​ DisabledRegionSplitPolicy策略会禁止Region自动拆分,但是可以通过手动拆分来拆分Region。

预拆分

​ 即在建表时就指定region个数以及拆分条件。书中介绍的是通过命令行创建,但是一般在HBase的web界面创建更加方便,所以不做记录。文章来源地址https://www.toymoban.com/news/detail-602400.html

手动拆分
可以在hbase shell中调用split方法手动拆分region。
split方法的调用方式如下:

split 'tableName'
split 'namespace:tableName'
split 'regionName' # format: 'tableName,startKey,id'
split 'tableName', 'splitKey'
split 'regionName', 'splitKey'

到了这里,关于Hbase split Region的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python读取hbase数据库

    1. hbase连接 首先用hbase shell 命令来进入到hbase数据库,然后用list命令来查看hbase下所有表,以其中表“DB_level0”为例,可以看到库名“baotouyiqi”是拼接的,python代码访问时先连接: 备注:完整代码在最后,想运行的直接滑倒最后复制即可 2. 按条件读取hbase数据 然后按照条件

    2024年04月09日
    浏览(50)
  • Python使用happybase写入HBase

    HBase是一个分布式的、面向列的NoSQL数据库,可以存储大量的非结构化或半结构化的数据。tif是一种常见的影像文件格式,可以存储多波段的栅格数据。本文将介绍如何使用Python的happybase模块和gdal模块,从tif格式的影像文件中读取数据,并将其存储到HBase数据库中。 主要内容

    2024年02月16日
    浏览(27)
  • 在HBase中执行查询操作通常使用HBase Shell或编程语言API(如Java或Python)来执行

    在HBase中执行查询操作通常使用HBase Shell或编程语言API(如Java或Python)来执行。以下是使用HBase Shell进行查询的一些示例: 单行查询:获取指定行键的数据。 扫描表:按行范围获取表中的多个行的数据。 过滤器查询:使用过滤器指定查询条件来获取数据。 列族查询:获取指

    2024年01月21日
    浏览(45)
  • 【大数据&AI人工智能】HBase的核心数据结构和算法原理是什么?给出代码实例

    HBase是一个开源的非关系型分布式数据库,它参考了Google的BigTable模型,实现语言为 Java。它是Apache软件基金会的Hadoop项目的一部分,运行在HDFS文件系统之上,为 Hadoop 提供类BigTable 的服务。 HBase的核心数据结构和算法原理是什么?给出代码实例。HBase的核心数据结构和算法原

    2024年02月09日
    浏览(54)
  • Python使用多线程操作tif影像和HBase数据库

    本文介绍使用Python的多线程技术,提高happybase模块和gdal模块的效率,从tif格式的影像文件中读取数据,并将其存储到HBase数据库中。主要步骤包括: 准备工作:安装Python环境,安装happybase模块和gdal模块,安装HBase数据库,并准备tif影像文件。 读取tif影像数据:使用readTif函数

    2024年02月09日
    浏览(42)
  • hbase和aerospike基础概念及所对应的python包API使用

    Hbase shell常用操作 1.创建表 table name:表名 column family:列族名 2.查看所有表名称 3.插入操作 row1:行键(即Row Key) column family:column name:列族名和列名 value:插入列的值 4.查看表结构操作 5.更新操作 6.获取指定字段的操作 aerospike常用操作 1.显示所有命名空间 2.显示所有表(集合)

    2024年02月05日
    浏览(30)
  • HBase基础知识(一):HBase简介、HBase数据模型与基本架构

    HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。 逻辑上,HBase的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列。但从HBase的底层物理存储结构(K-V)来看,HBase更像是一个 multi-dimensionalmap 。 1.2.1HBase逻辑结构 字典序:按位比较。 下图是一张表

    2024年02月03日
    浏览(38)
  • HBase(2):HBase数据模型

    1 简介 在HBASE中,数据存储在具有行和列的表中。这是看起来关系数据库(RDBMS)一样,但将HBASE表看成是多个维度的Map结构更容易理解。 表结构如下: ROWKEY C1列蔟 C2列蔟 rowkey 列1 列2 列3 列4

    2024年02月01日
    浏览(33)
  • HBase(13):HBase高可用

    考虑关于HBase集群的一个问题,在当前的HBase集群中,只有一个Master,一旦Master出现故障,将会导致HBase不再可用。所以,在实际的生产环境中,是非常有必要搭建一个高可用的HBase集群的。 1 HBase高可用简介 HBase的高可用配置其实就是HMaster的高可用。要搭建HBase的高可用,只需

    2024年02月12日
    浏览(25)
  • HBase 开发:使用Java操作HBase

    通过Java代码操作HBase数据库,包括创建表、添加数据、获取数据和删除表等操作。学习如何使用HBaseConfiguration和ConnectionFactory连接HBase数据库,以及如何使用Admin对象创建表、Put对象添加数据、Get对象获取数据和删除表。

    2024年01月15日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包