多租户下不同业务对hbase需求不同,要优先保证实时性高的应用,限制实时性要求低大批量查询的任务,为了减小应用间相互影响需要对资源进行限制
Hbase quota 资源限制
开启Hbase quota
Hbase-site.xml增加如下配置:
hbase.quota.enabled=true
hbase.quota.refresh.period=60000 # 一分钟后生效
cdh中配置如下,配置中”高级 — hbase-site.xml ”
Hbase quota使用:
HBase的Quota功能可以实现对用户级、表级和命名空间级的资源进行限制.可以从请求次数,请求数据大小两个维度进行限制。限制是对每台服务器。
req/time:单位时间内的请求次数,
size/time:单位时间内的请求数据的大小
req:整数,请求次数
time:时间单位,sec, min, hour, day (秒,分钟,小时,天)
size: 存储单位
B (bytes), K (kilobytes), M (megabytes), G(gigabytes), T (terabytes), P (petabytes)
命令
list_quotas, set_quota TYPE => <type>, <args>
Quota参数:
TYPE => THROTTLE
THROTTLE_TYPE:可以表示为READ,WRITE或默认类型(读取+写入)。
用法案例:
# 限制用户u1每秒10个请求
hbase> set_quota TYPE => THROTTLE, USER => 'u1', LIMIT => '10req/sec'
# 限制u1用户每秒10个读请求
hbase> set_quota TYPE => THROTTLE, THROTTLE_TYPE => READ, USER => 'u1', LIMIT => '10req/sec'
# 限制用户u1每天的请求数据量为10M
hbase> set_quota TYPE => THROTTLE, USER => 'u1', LIMIT => '10M/day'
# 限制用户u1每秒写入10M
hbase> set_quota TYPE => THROTTLE, THROTTLE_TYPE => WRITE, USER => 'u1', LIMIT => '10M/sec'
# 限制用户u1操作t2表,每分钟请求次数为5k
hbase> set_quota TYPE => THROTTLE, USER => 'u1', TABLE => 't2', LIMIT => '5K/min'
# 限制用户u1操作t2表每秒读取请求为10次
hbase> set_quota TYPE => THROTTLE, THROTTLE_TYPE => READ, USER => 'u1', TABLE => 't2', LIMIT => '10req/sec'
# 删除用户u1在命名空间ns2上的现在
hbase> set_quota TYPE => THROTTLE, USER => 'u1', NAMESPACE => 'ns2', LIMIT => NONE
#限制命名空间ns1每小时请求次数为10
hbase> set_quota TYPE => THROTTLE, NAMESPACE => 'ns1', LIMIT => '10req/hour'
# 限制表t1每小时请求10T数据量
hbase> set_quota TYPE => THROTTLE, TABLE => 't1', LIMIT => '10T/hour'
# 删除u1用户限制
hbase> set_quota TYPE => THROTTLE, USER => 'u1', LIMIT => NONE
#显示用户u1在命名空间ns2中的所有限制详情
hbase> list_quotas USER => 'u1, NAMESPACE => 'ns2'
#显示命令空间ns2的所有限制详情
hbase> list_quotas NAMESPACE => 'ns2'
#显示表t1的所有限制详情
hbase> list_quotas TABLE => 't1'
#显示所有限制
hbase> list_quotas
#用户u1不受限制
hbase> set_quota USER => 'u1', GLOBAL_BYPASS => true
限制命名空间表个数
创建一个最多包含5个表的命名空间
hbase> create_namespace 'ns1', {'hbase.namespace.quota.maxtables'=>'5'}
# 修改命名空间表个数
hbase> alter_namespace 'ns2', {METHOD => 'set', 'hbase.namespace.quota.maxtables'=>'8'}
#显示命名空间下的信息
hbase> describe_namespace 'ns2'
# 删除命名空间表数量限制
hbase> alter_namespace 'ns2', {METHOD => 'unset', NAME=>'hbase.namespace.quota.maxtables'}
命名空间region数限制
# 创建一个最多10个region的命名空间
hbase> create_namespace 'ns1', {'hbase.namespace.quota.maxregions'=>'10'
# 显示命名空间信息
hbase> describe_namespace 'ns1'
# 修改命名空间region数量
hbase> alter_namespace 'ns2', {METHOD => 'set', 'hbase.namespace.quota.maxregions'=>'20'}
# 删除命名空间region个数限制
hbase> alter_namespace 'ns2', {METHOD => 'unset', NAME=> 'hbase.namespace.quota.maxregions'}