白话-HBase Quota V2

背景

Quota背景:当请求量异常大,会造成RegionServer不稳定

所以需要控制RegionServer单位时间执行的流量

 

设置Quota的命令,目前设置的LIMIT语义都是 (单个RegionServer上可以给这个user/table/namespace的请求量,而不是整个集群/整个表/整个namespace的)

//设置Quota

hbase> set_quota TYPE => THROTTLE, USER => 'u1', TABLE => 't2', LIMIT => '5K/min'

 

 

//取消Quota命令

hbase> set_quota TYPE => THROTTLE, USER => 'u1', LIMIT => NONE

配置的维度

limit限制的类型

请求Size还是请求的次数

单位时间

NAMESPACE
USER
TABLE
USER+NAMESPACE
USER+TABLE

READ

WRITE

READ+WRITE

请求次数:req

请求Size:B, K, M, G, T, P


 

sec, min, hour, day

 

相关配置

<property>

    <name>hbase.quota.enabled</name>

    <value>true</value>

</property>

<property>

    <name>hbase.quota.rate.limiter</name>

    <value>org.apache.hadoop.hbase.quotas.AverageIntervalRateLimiter</value>

</property>

 

HBase Quota触发整体流程

 

1.策略是在RegionServer上具体执行的

2.Quota元数据表

每个设置会对应RegionServer中的一个RateLimiter

设置的语义:每个RegionServer上,这个表对应的region,单位时间可以处理的流量

翻译:如果T1表分布在10台机器上,set_quota设置的THROTTLE_TYPE => WRITE, TABLE => 'T1', LIMIT => '10M/sec'  说明每台机器对应的这个表写入流量都是10M/s)

 


RateLimiter

 

AverageIntervalRateLimiter

  1. refill:重新充填时间
  2. checkQuota  --> canExecute
    1. refill方法: 返回按已流失时间计算出来的可用量delta
    2. avail = avail + delta;
    3. 如果avail不够用了就报异常,最终返回给客户端;(avail < 本次实际请求量 return false;)
      
  3. consume : 消耗 avail

FixedIntervalRateLimiter

  1. refill 每次返回delta都== limit
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章