HBase隔離方案實戰 rsgroup

2021-08-27 18:26:01 字數 3591 閱讀 2259

本文參考:   , 這篇文章寫的很好, 就是命令沒法用, 一度以為我們的集群不支援rsgroup, 無意中試出了幫助命令, 才發現, 命令不太對, 不知道是作者粗心還是每個版本的命令不一樣, 這裡做了一些修正, 我們的集群是cdh5.12.1, hbase是1.2.0

hbase適合用於海量資料的儲存,橫向擴充套件非常方便,隨著資料的增長,訪問的效能卻不會出現很大的下降。這是很多的公司選擇使用hbase作為分布式資料庫的乙個很重要的原因。正常來說,乙個hbase集群肯定不止跑乙個業務,即多個業務共享集群資源。這些業務中有的對效能要求很高;有的業務要求儲存很大;有的業務屬於公司的核心業務,需要重點保障;有的業務是離線業務,短時間訪問不了影響也不大。這裡就會產生對於不同業務的不同sla需求。也就是集群需要有隔離的功能。

全部業務共享集群資源的場景下,如果出現問題,將會同時影響多個業務。那麼怎麼來解決集群的隔離?不會因為某個業務的訪問量陡增或者不合理使用,導致其他的業務受到影響?

最先想到的解決辦法可能是搭建多個hbase集群,將不同的業務使用不同的hbase,這樣就能很好地實現業務之間的隔離。但是這裡會存在如下幾個問題:

1、管理麻煩

2、集群很小,效能不太好

3、單台機器影響大(集群小,單台上的region多,出問題影響面廣)

4、需要的zk、master、namenode等的機器更多

5、抗單個業務陡增的場景不強

因此真實的使用場景,不太可能為每個業務搭建單獨的集群,最多就是給非常重要的業務搭建乙個單利的集群,其他的非核心業務放在乙個大集群中,隔離還是剛需。

那在hbase中是否有更好一點的隔離策略?

答案是有,之前yahoo在大規模使用hbase集群的時候也遇到了隔離的問題,他們開發了rsgroup解決方案,比較好地解決了不同應用在regionserver上的隔離。並將rsgroup推薦給了官方,官方版本整合了yahoo提交的rsgroup隔離方案。rsgroup方案的原理如下下圖所示:

在上圖中有兩個rsgroup,具體原理為:

1、將不同的regionserver分配到不同的rsgroup中

上圖中regionserver1、regionserver2、regionserver3被分配到了important_group中,regionserver4、regionserver5、regionserver6被分配到了normal_group中。

2、將不同的表分配到不同的group中

上圖中表t1和t2分配到了important_group,表t3和t4分配到了normal_group。

3、表、regionserver分配到具體的rsgroup後就達到了隔離的效果

做好分配後,以表t1為例,t1的所有region都只會落到important_group所屬的regionserver中。此時當normal_group的任何regionserver異常,都不會引起t1表的異常(datanode異常會有影響,後面有說明)。只有當important_group所屬的regionserver異常,並且有t1的region落在該regionserver上才會有影響。表代著業務,你可以將同型別(重要等級)的表放在同乙個rsgroup中,這就實現了不同業務的隔離。

對於於重點業務,可以分配更多的regionserver的機器,負載更低;而對於非重點業務,則可以更少的機器承擔負更多的業務。目前datanode已經支援了分級儲存,甚至可以將重點業務使用不同的介質,比如ssd。

優點:

管理方便

充分利用集群的資源

機器騰挪擴容很方便

有利於整個集群效能的提公升

缺點:

隔離不徹底,hdfs層還是共用,如果datanode出現異常,還是會影響到多個業務。

修改hbase-site.xml, 並重啟master即可

hbase.coprocessor.master.classes

org.apache.hadoop.hbase.rsgroup.rsgroupadminendpoint

hbase.master.loadbalancer.class

org.apache.hadoop.hbase.rsgroup.rsgroupbasedloadbalancer

cdh集群配置方法: 

幫助命令解釋的很詳細,大概有9個命令, 這裡大致說一下:

add_rsgroup 'my_group'

例如:

add_rsgroup 'g01_group'

例如:

move_servers_rsgroup 'g01_group',['a2502f09:60020'] 

move_servers_rsgroup 'g01_group',['a2502f12:60020'] 

(a2502f09 和 a2502f12 是機器別名)

經測試, rs移動到新組的時候, 該rs上原有的region會自動分配到原組的其他rs上, 移動之後的rs是空的

move_tables_rsgroup '組名',['table1','table2']

例如:

move_tables_rsgroup 'g01_group', ['hbase:meta']

經測試, 表移動到新組, 所有和表相關的region會自動移動到新組所屬的regionserver上

注意:如果表的region很多,建議每次只遷移乙個表,否則很容易超時。

get_rsgroup 'default'

get_rsgroup 'g01_group'

balance_rsgroup 'g01_group'

get_server_rsgroup 'server1:port1'

例如:

get_server_rsgroup 'a2502f09:60020'

get_table_rsgroup 'hbase:meta'

list_rsgroups

也可用正規表示式篩選

list_rsgroups 'de*'

remove_rsgroup 'g01_group'

1、遷移完錶後記得做major compact(本地化) major_compact 'tablename'

2、遷移完錶後做hbase hbck校驗,防止新增遷移表的時候有部分region未上線的情況

3、刪除group之前需要將group下的regionserver和table都移除掉

4、default組和其他的rsgroup不一樣,default是動態的,其他的group則是靜態的

HBase隔離方案實戰 rsgroup

hbase適合用於海量資料的儲存,橫向擴充套件非常方便,隨著資料的增長,訪問的效能卻不會出現很大的下降。這是很多的公司選擇使用hbase作為分布式資料庫的乙個很重要的原因。正常來說,乙個hbase集群肯定不止跑乙個業務,即多個業務共享集群資源。這些業務中有的對效能要求很高 有的業務要求儲存很大 有的...

HBase程式設計實戰

程式設計實現以下指定功能,並用hadoop提供的hbase shell命令完成相同任務 1 列出hbase所有的表的相關資訊,例如表名 public static void main string args throws ioexception if admin null admin.close i...

《HBase實戰》一導讀

hbase實戰 2008年秋季我開始和hbase結緣,當時它還是乙個新生專案,一年前剛剛發布。早期版本出來時,hbase表現很不錯,但是也不是沒有令人尷尬的缺陷。hbase專案當時有近10個軟體commiffer,作為乙個apache子專案還算不錯。接下來是nosql宣傳的高潮。當時專有名詞nosq...