Hbase 1.1.0 版本后社区给出处理 multiple workloads的方案,Quotas、Request Queues、 Multiple-Typed Queues
1. Quotas
针对用户、表、和表空间资源的限制
- 每时间段请求的数量和大小
- 表空间表的数量
配置<hbase-site.xml>
hbase.quota.enabled=true
hbase.quota.refresh.period =300000
示例
# Limit user u1 to 10 M write size per sec
hbase> set_quota TYPE => THROTTLE, THROTTLE_TYPE => WRITE, USER => 'u1', LIMIT => '10M/sec'
# Limit user u1 to 10 read requests per sec on table t2
hbase> set_quota TYPE => THROTTLE, THROTTLE_TYPE => READ, USER => 'u1', TABLE => 't2', LIMIT => '10req/sec'
# Limit all users to 10 requests per hour on namespace ns1
hbase> set_quota TYPE => THROTTLE, NAMESPACE => 'ns1', LIMIT => '10req/hour'
# Limit all users to 10 T per hour on table t1
hbase> set_quota TYPE => THROTTLE, TABLE => 't1', LIMIT => '10T/hour'
# Create a namespace with a max of 5 tables
hbase> create_namespace 'ns1', {'hbase.namespace.quota.maxtables'=>'5'}
# Create a namespace with a max of 10 regions
hbase> create_namespace 'ns1', {'hbase.namespace.quota.maxregions'=>'10'
# user u1 is not affected by the limit
hbase> set_quota USER => 'u1', GLOBAL_BYPASS => true
- THROTTLE_TYPE 可以设置为write、read,默认为read+write
- 时间段值:sec、min、 hour、 day
- 请求大小值:B (bytes), K (kilobytes), M (megabytes), G (gigabytes), T (terabytes), P (petabytes)
- 请求数量:req
- 表或者region值为整数
2. Request Queues
0.99版本之后,HBase将默认请求队列由FIFO类型改为了Deadline类型。Deadline算法目标是使得在线交互式查询请求优先级更高,而离线长scan请求优先级更低。除此之外还有一个通常不会被注意的目标:不能出现任何请求被饿死!
HBase在具体实现中会为每一个请求设置一个deadline(时间期限),代表这个请求的处理期限,deadline越小,请求优先级越高。
3. Multiple-Typed Queues
Multiple Queues
hbase.ipc.server.callqueue.handler.factor=0.1
假设总handlercount=150,则会产生15个独立队列。
Read and Write Queues
hbase.ipc.server.callqueue.read.ratio =0.6
表示会有9个队列用于接收读请求,6个用于接收写请求。
Get and Scan Queues
hbase.ipc.server.callqueue.scan.ratio=0.1
表示1个队列用于scan请求,另外8个用于get请求。