一文详解HBase资源隔离相关的解决方案

背景

        易扩展性,准确来说是易横向扩展性,一直是HBase引以为豪的优点之一,所以理论上HBase的集群规模可以做到很大,多个产品和业务的数据可以存在一个HBase中统一管理,节省运维资源和成本。

        但是集群规模大了,数据量多了,处理负载变高了,加上各个产品和业务之间优先级不同,负载不同,对不同资源的敏感性也不同,使得简单粗暴的共用一个集群的效果并不是很好,面对这种业务场景早期的HBase版本并没有相关的解决方案,所以更多的就是各自为战,各自用各自的集群,这样不仅使得HBase集群重复建设,增加硬件投入以及运维成本外,更是埋没了HBase的易扩展型的特点,所以后续的HBase版本中慢慢加入了多租户以及业务资源隔离相关的解决方案。

正文

        下面就从硬件资源隔离以及业务资源隔离两个方面来说明下HBase的实现:

硬件资源隔离--RsGroup

RsGroup概述

        此功能用于将统一的大HBase 集群的 RegionServer 划分为多个分组,管理员可以将不同的表放入不同分组进行资源隔离,避免无关系的业务之间互相影响。

        同样也可以根据不同的业务需求提供不同的硬件资源。对于于重点业务,可以分配更多的regionserver的机器,降低负载;而对于非重点业务,则可以更少的机器承担负更多的业务。目前datanode已经支持了分级存储,甚至可以将重点业务使用不同的介质,比如SSD,从而达到硬件资源利用率和业务执行效率双提升的目的。

        下图就是HBase中RsGroup的实现方式:

RsGroup特点

从上图以及上面的描述可以看出,RsGroup的特点如下:

优点

  • 隔离级别做到RegionServer级别,即HBase层面的资源以及操作已经做到隔离,各个group之间不会相互影响
  • 可以根据业务定制化硬件配给,提升硬件使用率
  • 各个group之间隔离,保证了各个业务系统的稳定性
  • 方便管理和扩展
  • 提升了整个集群的性能

缺点

  • HBase底层的HDFS还是公用一份,如果HDFS出现问题,可能会影响一个甚至多个的RsGroup

RsGroup启用

启用过程修改所有节点的hbase-site.xml, 并重启master即可,配置修改如下:

  <property>
 
    <name>hbase.coprocessor.master.classes</name>
 
    <value>org.apache.hadoop.hbase.rsgroup.RSGroupAdminEndpoint</value>
 
  </property>
 
  <property>
 
    <name>hbase.master.loadbalancer.class</name>
 
    <value>org.apache.hadoop.hbase.rsgroup.RSGroupBasedLoadBalancer</value>
 
  </property>

RsGroup原则

生产系统中的RsGroup的使用需要兼顾到很多硬件成本以及业务需求相关的限制,下面给出几个相对通用的原则供大家参考:

  • 在线业务和离线业务尽量划分到不同组

  • 重要业务和边缘业务尽量划分到不同组

  • 非常重要的业务尽量单独划分到独立组或者单独部署集群

  • 最好将系统表单独放在一个组中,防止业务数据影响HBase的正常使用

  • 针对数据以及业务量较少的业务,单独创建组可能比较浪费,可以创建一个公共组来支撑此种场景

  • 使用RSGroup会自动关闭全局自动负载均衡,后续需要手工触发

RsGroup管理

最后说说RsGroup使用过程中相关的管理以及注意事项:

  • 开启完毕RsGroup并且table迁移过程中,需要注意RIT region的数量变化,可以通过hbase hbck或者hbase的web界面进行跟踪,遇到了region卡在RIT阶段的需要手动处理和解决,如果没有RIT的region后,执行hbase hbck查看hbase的状态,如果是OK的则table迁移完成
  • 开启完毕RsGroup并且table迁移完毕后需要手动对每个table执行major_compact以使每个table达到本地化的效果
  • 删除RsGroup之前需要将该group下的regionserver和table都移除掉
  • 在RsGroup投入使用后,需要对每个Group,尤其是重要业务的Group使用监控以及告警软件或者脚本进行状态监控和跟踪,通过获取到的Group状态作为集群运维以及管理的依据,进行资源的增减以及group的管理,保证集群稳定高效的运行

业务资源隔离--读写分离

RegionServer 默认情况下只提供一个请求队列给所有业务使用,该队列处理所有的读写请求,导致部分延迟较高的请求影响其他对延迟敏感的业务,大量的写请求影响了读请求。针对这种情况,HBase 提供了读写队列隔离方案。

HBase 有四种典型的数据API操作类型,分别为 get、scan 和put、delete,其中 get 和 scan 属于 read 类型,put、delete属于write类型。默认场景下,HBase 只提供一个队列,所有请求都会进入该队列进行优先级排序。在一些场景下,我们要求这四种类型的访问尽可能的互相不影响,那么就需要在线上配置读写分离。

首先,我们可以根据HBase的业务特点,即读多写少还是写多读少来分配读写的比例:

HBase 中的相关配置如下:

<property>
    <name>hbase.ipc.server.callqueue.read.ratio</name>
    <value>0.5</value>
</property>

该值在HBase中默认为0,代表读写资源不分离。如果将 hbase.ipc.server.callqueue.read.ratio 设置为0.5,则表示有50%的线程数处理读请求,剩余50%用于接收写请求。如果读多写少,则将该值设置为0.5-1之间;如果写多读少,则将该值设置为0-0.5之间。

其次,在某些场景下,读操作scan以及get也需要进行隔离,HBase也同样提供scan以及get的比例:

HBase 中的相关配置如下:

<property>
    <name>hbase.ipc.server.callqueue.scan.ratio</name>
    <value>0.5</value>
</property>

该值在HBase中默认为0,代表scan和get资源不分离。如果将 hbase.ipc.server.callqueue.scan.ratio 设置为0.5,则代表在50%的读线程之中,再有50%的线程处理 scan,也就是全部线程的25%。如果scan多get少,则将该值设置为0.5-1之间;如果get多scan少,则将该值设置为0-0.5之间。

 

传送门:HBase完整文档:HBase生产环境从入门到熟练使用,这一篇文章就够了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HBase中,创建表时可以使用多个参数来定义表的属性和行为。下面是一些常见的HBase建表参数的详解: 1. 表的名称(NAME):表在HBase中的唯一标识符。 2. 列族(COLUMN FAMILIES):表中数据的逻辑组织单元,可以包含多个列(Column)。列族在表创建时定义,之后不能修改。 3. 最大版本数(VERSIONS):指定每个单元格(Cell)最多保存的版本数,默认为1。当设置为1时,只保存最新版本。 4. 最小版本数(MIN_VERSIONS):指定每个单元格至少保存的版本数,默认为0。当设置为0时,只保存最新版本。 5. TTL(TIME TO LIVE):指定每个单元格的存活时间,以秒为单位。过期的单元格将被自动删除。 6. 块大小(BLOCK SIZE):HBase将表数据以块(Block)的形式存储在HDFS上。块大小是指每个块的大小,默认为64KB。 7. 压缩类型(COMPRESSION):指定表中数据的压缩算法。常用的算法有Gzip、Snappy等。 8. 数据复制(REPLICATION SCOPE):指定数据复制的范围。可以选择在集群内部复制或跨集群复制。 9. 分区器(SPLIT POLICY):HBase使用行键(Row Key)对数据进行分区和存储。分区器定义了如何将数据分布到不同的Region Server上。 10. 预分区(PRE-SPLIT):在创建表时,可以预先将表分成若干个区域(Region),提高并发性能和负载均衡能力。 以上是一些常见的HBase建表参数,具体使用时可以根据实际需求进行调整。还有其他一些高级参数可供选择,如缓存大小、写入策略等,根据具体情况选择合适的参数进行配置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值