千家信息网

HBase如何实现多租户

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍了HBase如何实现多租户,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。多租户(multi-tenancy techn
千家信息网最后更新 2026年11月02日HBase如何实现多租户

这篇文章主要介绍了HBase如何实现多租户,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。


多租户(multi-tenancy technology),参考维基百科定义,它是在探讨与实现如何于多用户的环境下共享相同的系统或程序,并且仍可确保各用户间数据的隔离性。随着云计算时代的到来,多租户对于云上服务显得更加重要。所以HBase也有许多多租户相关的功能,其为多个用户共享同一个HBase集群,提供了资源隔离的能力。本文将从Namespace&ACL,Quota,RSGroup三个方面来进行介绍。

Namespace&ACL

在HBase中,创建namespace是一个很轻量的操作,将不同业务的表隔离在不同的namespace是一个最简单的资源隔离的方法。同时,ACL、quota、 rsgroup等常用的资源隔离方式都支持设置在namespace上。

ACL,全称Access Control Lists,用于限制不同的用户对不同的资源的操作或访问权限。

使用ACL需要添加如下配置:

1、ACL的几个概念


User分为普通user和super user。super user包括启动HBase服务的用户和hbase.superuser配置的用户,可以对集群进行管理操作。普通用户需要授权后,才能访问或操作HBase。Scope可以理解为资源的粒度。

HBase的各种操作需要的Action可以在HBase的官方文档中查看:http://hbase.apache.org/book.html#appendix_acl_matrix

结合用户的访问或操作需求,将user在合理的scope上设置合理的action,是实现用户权限控制的最佳方式。

2、设置或取消权限

在HBase shell中或调用HBase API,设置或取消权限。shell中的操作如图:

设置namespace的权限需要加@前缀:

设置Cell的权限:

3、权限的存储

存储在hbase:acl表中,rowkey是根据scope计算出来的。acl表结构如下表:


Cell权限使用tags of HFile v3存储。

4、鉴定权限

鉴定权限是指判断某个用户是否拥有某个操作的权限。这个过程是在AccessController中完成的,AccessController是一个实现了MasterObserver、RegionServerObserver、RegionObserver等的coprocessor,在master、regionserver、region等操作的hook中检查权限。由于每台RS上都维护了完整的PermissionCache,检查PermissionCache中是否包含了所需的权限,如果权限不足,则抛出AccessDeniedException。


5、添加/删除权限

添加/删除授予的过程如下图所示:

(1)client向有acl region的region server发出grant或revoke请求;

(2)收到请求的region server,将新的权限put或者delete到acl表中;

(3)AccessController在region的postPut和postDelete的hook中,如果操作的是acl region,则将更新的权限从acl table中读出,并写入到zk上;

(4)通过zk的监听机制,通知master和regionserver更新PermissionCache,实现权限在master和其他regionserver中的同步。

6、基于Procedure的添加/删除权限

为了使用Procedure实现权限的同步,需要首先将grant/revoke请求发送到master处理, 参考HBASE-21739。然后在添加/删除权限阶段,主要有两个关键的步骤,一是记录权限到acl table中,二是将更新后的权限同步到全部的RegionServer上。设计了UpdatePermissionProcedure来实现这个操作,参考HBASE-22271(目前还没有合并到社区版的master分支)。在UpdatePermissionStorage阶段,更新acl表及zk,master上的PermissionCache,在UpdatePermissionCacheOnRS阶段,发起UpdatePermissionRemoteProcedure,更新RS的PermissionCache。

UpdatePermissionProcedure需要解决五种权限同步的case:

Grant:添加权限

Revoke:删除权限

Delete Namespace:删除namespace的全部权限

Delete Table:删除table的全部权限

Reload:重新获取全部的Permission。

在新的方案中,zk不用于通知RS更新PermissionCache,只用于acl的存储。因为当RS或Master启动时,acl table不一定online,此时,需要从zk上load permission。当acl表中的权限与zk上的权限不一致时,应该以acl表中的权限为准。因此,当master启动且acl table online后,发起类型为Reload的UpdatePermissionProcedure,更新zk上的permission,并更新RS上的PermissionCache。

Quota&Throttle

由于集群的资源及服务能力是有上限的,Quota用于限制各个资源的数据量的大小及访问速度。

需要如下配置开启HBase的quota功能:

HBase中关于Quota的几个概念及其相互关系如下图所示:

1、Throttle Quota

Throttle限制单位时间内,访问资源的次数或数据量。

  • 支持的时间单位包括sec, min, hour, day。

  • 使用req限制请求的次数;

  • 使用B, K, M, G, T, P限制请求的数据量的大小;

  • 使用CU限制请求的读/写容量单位,一个读/写容量单位是指一次读出/写入数据量小于1KB的请求,如果一个请求读出了2.5K的数据,则需要消耗3个容量单位。可以通过hbase.quota.read.capacity.unit或hbase.quota.write.capacity.unit配置一个容量单位的数据量。

  • Machine scope代表throttle额度配置在单台RS上。Cluster代表throttle配额被集群的全部RS共享。如果不指定QuotaScope的话,默认为Machine。

设置Throttle的shell命令如下:

设置RegionServer的throttle(目前只支持使用all关键字代表全部的RegionServer,不支持对指定的RegionServer设置Quota),一般来说,RS的quota代表该RS的服务上限,推荐以秒为时间单位设置:

设置Cluster scope的quota:

Cluster scope的quota是如何分配到各个RS上的:

  • 对于table的quota,TableMachineLimit = ClusterLimit / TotalTableRegionNum * MachineTableRegionNum;

  • 对于namespace的quota,NamespaceMachineLimit = ClusterLimit / RsNum,需要注意的是,这里没有考虑RSGroup,如果把namespace隔离到某个RSGroup,分配到RS上的throttle limit是偏小的,后续需要改进这个计算方式。

GlobalBypass在全局范围内,跳过throttle,配置在用户上。

2、Space Quota

Space用于限制资源的数据量大小,配置在namespace或者table上。当数据量达到限额时,执行配置的违反策略,包括:

Disable:disable table/ the tables of namespace

NoInserts:禁止除Delete以外的Mutation操作,允许Compaction

NoWrites:禁止Mutation操作,允许Compaction

NoWritesCompactions:禁止Mutation操作,禁止Compaction

看当前Space quota的快照(这里的快照并不是HBase中的快照),而是指当前表的空间大小,配置的limit,触发的策略的状态:

限制namespace的table或region数量:


hbase.namespace.quota.maxtables/hbase.namespace.quota.maxregions


如果超出限制的话,会抛出QuotaExceededException。

Space quota的实现原理是:

(1)RS周期的把Region size信息发送给master:RegionSizeReportingChoreMaster

(2)统计表的size及触发的策略并存到quota表:QuotaObserverChoreRS

(3)周期的读quota表,执行policy:SpaceQuotaRefresherChore

3、Soft limit

配置throttle limit为soft limit,也就是在集群资源富余的情况下,允许超发,使用如下命令打开或关闭超发:

注意,超发是指允许用户在RS的quota有富余的情况下,允许请求超出配置的user/namespace/table的quota,因此,必须首先设置RS的quota,才能打开超发功能。RS的quota推荐设置的时间单位为秒,因为使用其他时间单位的话,一旦RS的quota被其它用户的请求先消耗的话,恢复quota需要较长的时间,可能会影响后续的请求,即使这些后来的请求并没有超出其配置的user/namespace/table quota。

4、Quota存储

quota相关的信息存储在hbase:quota表中。

row key主要有以下几种:

n.namespace:namespace的quota

t.table:table的quota

u.user:user的quota

r.all:RegionServer的quota

exceedThrottleQuota:是否允许超发

Throttle相关的quota存储在q CF中,Space相关的quota存储在u CF中。

Throttle是否打开存储在/hbase/rpc-throttle的zk节点上,值为true或者false。因为打开或关闭Throttle是实时生效的,而其它quota配置是通过RS定期的读quota表,是延迟生效的。

5、Throttle

设置throttle分为2步:

(1)client向master发送set quota请求,master把quota存入hbase:quota表中;

(2)RS每五分钟,从quota表中加载最新的quota值并更新QuotaCache。因此,对于新设置的quota,最多五分钟后生效(可以通过hbase.quota.refresh.period配置时间间隔)。

当读写请求到达RS上时,限流过程如下图所示:


其中,在读数据前,会首先预估本次请求将要消耗的quota数目,目前社区的代码是按照一个get或mutate预计消耗100字节,一个scan预计消耗1000字节,这里应该是可以优化的,可以根据上次请求后读出的数据量来动态的调整预估的字节数。

Throttle limit是设置在某个时间单位上的,会随着时间的推移逐渐恢复,主要有两种恢复方式:

(1)Average Interval Refill(默认):根据当前和上一次的恢复时间,恢复出这段时间内的quota,但最大不能超出quota配置的limit。

比如,配置了100资源/秒,100ms后,恢复出10个资源。2s后,恢复出100资源,而不是200资源。

(2)Fixed Interval Refill:经过固定的时间间隔,恢复出全部quota。

比如,配置了100资源/秒,如果上次quota恢复的时间是10:10:10,100,则下次恢复时间为10:10:11,100,并记录本次恢复时间,如果在10:10:11,099访问,此时可用资源依然为0。

打开或关闭限流:

关闭限流时,配置的throttle将不会进行限流,即使集群开启了quota功能。

RSGroup

RSGroup,是把RS分配到不同的组中,之后,将namespace或者table分配到某个RSGroup中,从而实现隔离的目的,可以形象的理解为每个RSGroup组成了一个小集群。

使用RSGroup,需要添加如下配置:

当开启RSGroup后,所有的RS默认在default这个group中。

创建新的group后,必须首先移入RS到这个group中,之后才能把namespace或者table移动到这个group中。

添加新的RSGroup:

先将RS移动到这个group中,再将namespace移动到这个group中:

RSGroup的功能主要在RSGroupAdminEndpoint中实现,它是一个实现了MasterObserver的Endponit,在master操作的hook中,将table的region移动到对应的RSGroup中。

RSGroup的信息存储在hbase:rsgroup表中。同时,RSGroup的信息也在zk中存储,当集群启动时,rsgroup表还没有online时,从zk中读出RSGroup的信息。


感谢你能够认真阅读完这篇文章,希望小编分享的"HBase如何实现多租户"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

权限 配置 资源 时间 用户 数据 存储 单位 更新 限制 集群 隔离 租户 不同 信息 功能 支持 消耗 代表 大小 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技 云信互联网科技有限公司 互联网科技公司华为 深圳恒合互联网络科技有限公司 互联网与新科技 互联网科技媒体 北京三清互联网科技 互联网之后的科技是什么 全球顶尖互联网科技公司 互联网科技公司有风险吗 互联网科技与大数据专业 广州新华互联网科技学校电竞方面 华夏恒生科技与互联网科技 科技赋能视角下互联网保险发展 合肥互联网科技公司公章图片 黑云互联网科技有限公司 互联网科技企业商标注意事项 广西科技产业互联网是什么 河南商务圈互联网科技有限公司 北京瑞云互联网科技有限公司 互联网科技保险 成都互联网科技公司100强 宁夏众和广鑫互联网科技有限公司 工业互联网等科技实现智能化赋能 科技互联网海报 互联网科技圈年度人物 国大互联网教育科技有限公司薪资 本届互联网大会上的黑科技 互联网高科技绘画 中国主要互联网科技公司
0