温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
Fayson的github: https://github.com/fayson/cdhproject
提示:代码块部分可以左右滑动查看噢
1.文档编写目的
HBase集群在实际的使用的过程会遇到,不重要的业务使用集群资源过多,从而导致一些比较重要的业务无法正常运行,针对这种多工作负载问题社区提出了相应的应对措施,主要有如下几种:
1.Quotas:资源限制主要是针对User、NameSpace及Table的请求数和流量限制
2.Request Queues:资源调度针对任务优先级调度,在0.99版本之前HBase只提供FIFO队列,之后版本增加了DeadLine队列,使得在线交互式查询优先级更改,而离线的scan请求优先级更低。
3.Multiple-Typed Queues: 通过设置多个请求队列,为不同的请求划分至不同的队列。
在前面的文章中Fayson介绍了《如何在CDH中使用HBase的ACLs进行授权》,本篇文章主要介绍如何在CDH中使用HBase的Quotas设置资源请求限制。
- 文档概述
1.HBase启用Quota
2.HBase Quotas测试
3.总结
- 测试环境
1.CM和CDH版本为5.14.3
2.Redhat7.4
- 前置条件
1.集群已启用Kerberos
2.HBase启用Quotas
在CDH中默认HBase的Quotas功能是关闭的,需要通过CM为HBase配置Qutoas
1.登录CM,进入HBase服务配置界面
2.在搜索栏输入“hbase-site.xml”,增加如下配置:
代码语言:javascript复制<property>
<name>hbase.quota.enabled</name>
<value>true</value>
</property>
<property>
<name>hbase.quota.refresh.period</name>
<value>10000</value>
</property>
hbase.quota.refresh.period该参数主要是用于设置quota设置的刷新周期,默认为5min,如果需要设置的quota及时生效,则将该参数设置小一些。
完成如上配置后,根据提示重启HBase服务。
3.HBase Request Quotas测试
使用admin用户为testcf
1.使用admin用户为testcf用户设置每分钟2个Read和Write
该操作是针对用户进行限制,主要限制用户的请求频率
代码语言:javascript复制set_quota TYPE => THROTTLE, THROTTLE_TYPE => READ, USER => 'testcf', LIMIT => '2req/min'
set_quota TYPE => THROTTLE, THROTTLE_TYPE => WRITE, USER => 'testcf', LIMIT => '2req/min'
使用testcf用户访问HBase执行READ和WRITE操作
多次执行Scan操作,在执行第三次时提示等待30s
多次执行put操作,在执行第三次时提示等待30s
2.使用admin用户为fayson用户设置每分钟1B的写入流量
该操作是针对用户进行限制,限制用户的写入流量
代码语言:javascript复制[root@cdh03 ~]# klist
[root@cdh03 ~]# hbase shell
hbase(main):001:0> set_quota TYPE => THROTTLE, THROTTLE_TYPE => WRITE, USER => 'fayson', LIMIT => '1B/min'
hbase(main):003:0>
使用fayson用户向test_fayson表中插入一个超过1B的数据
代码语言:javascript复制hbase(main):003:0> whoami
fayson@FAYSON.COM (auth:KERBEROS)
groups: fayson
hbase(main):004:0> put 'test_fayson','0001','info:name','test0001'
3.使用admin用户设置test_fayson表的每分钟2个请求
该操作是针对表进行设置,限制指定表的请求频率或写入流量
代码语言:javascript复制hbase(main):005:0> set_quota TYPE => THROTTLE, TABLE => 'test_fayson', LIMIT => '2req/min'
hbase(main):006:0> list_quotas
hbase(main):007:0> whoami
使用任意用户查看test_fayson表数据
代码语言:javascript复制hbase(main):015:0* whoami
hbase(main):016:0> scan 'picHbase'
hbase(main):017:0> scan 'picHbase'
hbase(main):018:0> scan 'picHbase'
hbase(main):019:0> scan 'test_fayson'
hbase(main):020:0> scan 'test_fayson'
4.使用admin用户为my_ns_admin设置每分钟3个请求限制
该操作主要是针对NameSpace进行限制,可以设置NameSpace的请求数量和写入流量
代码语言:javascript复制hbase(main):001:0> set_quota TYPE => THROTTLE, NAMESPACE => 'my_ns_admin', LIMIT => '3req/min'
hbase(main):002:0> list_quotas
hbase(main):003:0> whoami
使用fayson用户进行如下测试,查看my_ns_admin空间下的任意表,第二次时会报错提示等待20s,一分钟3次分为每20s一次
4.HBase NameSpace Quotas测试
1.使用admin用户限制my_ns_admin空间的建表数据不超过3个
新建一个NameSpace为ns2并限制建表数量为2
代码语言:javascript复制hbase(main):001:0> whoami
hbase(main):002:0> create_namespace 'ns2', {'hbase.namespace.quota.maxtables'=>'2'
测试在ns2空间下创建表,在创建第三个表时提示已达到最大限制
如果是已存在的NameSpace,需要限制建表数量则可以通过alter的操作进行设置,命令如下:
代码语言:javascript复制alter_namespace 'ns2', {METHOD => 'set', 'hbase.namespace.quota.maxtables'=>'8'}
取消限制命令如下:
代码语言:javascript复制alter_namespace 'ns2', {METHOD => 'unset', NAME=>'hbase.namespace.quota.maxtables'}
2.使用admin用户为NameSpace限制Region数量
新建一个NameSpace为ns1并限制Region的数量为10,语句如下
代码语言:javascript复制hbase(main):001:0> whoami
hbase(main):002:0> create_namespace 'ns1', {'hbase.namespace.quota.maxregions'=>'10'}
hbase(main):003:0>
在ns1空间下创建表并指定Region数量测试,当执行第三建表语句时提示Region数据最大为10,超出限制。
代码语言:javascript复制create 'ns1:test1','info', { NUMREGIONS => 4 , SPLITALGO => 'UniformSplit' }
create 'ns1:test2','info', { NUMREGIONS => 4 , SPLITALGO => 'UniformSplit' }
create 'ns1:test3','info', { NUMREGIONS => 4 , SPLITALGO => 'UniformSplit' }
如果是已存在的NameSpace,需要限制Region数量则使用如下语句,进行修改
代码语言:javascript复制alter_namespace 'ns2', {METHOD => 'set', 'hbase.namespace.quota.maxregions'=>'10'}
取消限制:
代码语言:javascript复制alter_namespace 'ns2', {METHOD => 'unset', NAME=> 'hbase.namespace.quota.maxregions'}
5.总结
1.HBase支持对User、NameSpace和Table进行请求数和流量配额限制
2.限制频率可以按sec、min、hour、day
3.对于请求大小限制示例(5K/sec,10M/min等),请求大小限制单位如下:
B(bytes),K(kilobytes),M(megabytes),G(gigabytes),T(terabytes),P(petabytes)
4.支持限制NameSpace下建表数量和Region数量,无法直接限制建表大小
5.HBase设置限额后默认生效时间为5min,如果需要尽快使其生效则调整hbase.quota.refresh.period参数,单位ms
提示:代码块部分可以左右滑动查看噢
为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操