hbase資源管理

概述

在HBase-1.1.0之前,HBase集羣中資源都是全量的。用戶、表這些都是沒有限制的,看似完美實則隱患較大。

流量限制

爲什麼要做流量限制,無限制全量跑不是更好嗎?

比如今天的雙十一日,數據流量是非常大的。如果不限制用戶和表的流量,某些重要的核心業務,需要在資源有限的情況下優先保證正常運行。如果非核心業務在此期間其QPS一直降不下來,嚴重消耗系統資源,影響核心業務的正常運作。

針對上述問題,可以採取以下方案來解決:

資源限制:針對用戶、命名空間及表的請求大小和QPS進行限制。
資源隔離:將不同表中的數據通過物理隔離,均衡到不同的RegionServer上。

資源限制

開啓HBase資源限制是有條件,其中包含以下兩個條件:

1.版本必須在1.1.0以上,或者在低版本中打上了HBase對應的Patch(HBASE-115982.HBase的資源限制開關默認是關閉的,需要在HBase的配置文件中進行開啓。
# 編輯HBase配置文件
vi hbase-site.xml
 
# 添加如下內容
 <property>
   <name>hbase.quota.enabled</name>
   <value>true</value>
 </property>
 
# 退出編輯並保存

首次啓動時配置的,需要重啓HMaster服務進程才能生效。

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或默認類型(讀取+寫入)。

HBase中限流是通過Quota語句來操作的,限流的方式有兩種,一種是針對用戶進行限流;另一種是針對表來進行限流。

# 限制用戶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

限制命名空間中的表個數

# 創建一個命令空間最大包含5個表
hbase> create_namespace 'ns1', {'hbase.namespace.quota.maxtables'=>'5'}
 
# 修改一個已存在的命令空間所允許的表數量大小爲8個
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個數爲20個
hbase> alter_namespace 'ns2', {METHOD => 'set', 'hbase.namespace.quota.maxregions'=>'20'}
 
# 刪除命名空間中Region個數的限制
hbase> alter_namespace 'ns2', {METHOD => 'unset', NAME=> 'hbase.namespace.quota.maxregions'}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章