HBase 多租戶隔離技術:RegionServer Group 介紹及實戰
下面文字如程式碼錯亂,可以點選下面的 閱讀原文 即可進入原文閱讀。https://www.iteblog.com/archives/2435.html
背景
隨著 Apache HBase 在各個領域的廣泛應用,在 HBase 運維或應用的過程中我們可能會遇到這樣的問題:
-
同一個 HBase 叢集使用的使用者越來越多,不同使用者之間的讀寫或者不同表的 compaction、region splits 操作可能對其他使用者或表產生了影響。將所有業務的表都存放在一個叢集的好處是可以很好的利用整個叢集的資源,只需要一套運維繫統。
-
如果一個業務或者一個部門使用一個 HBase 叢集,這樣會導致 HBase 叢集的數量越來越多,直接導致了運維成本的增加。而且叢集的分離也會導致資源的浪費,有些叢集資源過剩,有些叢集資源不足,這種情況我們無法充分利用不同叢集的資源。將叢集按照業務或部門分開的好處是可以很好的隔離不同表、不同使用者之間的影響。
上面兩種情況均存在不足,如果我們能夠多租戶共用一套叢集,而且能夠使不同使用者之間進行隔離,在上層使用者看來好像是獨享一套 HBase 叢集。為了解決這個問題,來自雅虎的 Francis Liu 提出了多租戶隔離技術:RegionServer Group,詳情請參見 HBASE-6721。這個技術的目標就是隻需維護一個 HBase 叢集,同時滿足各個表在效能上、操作上的互不干擾,又支援訪問安全隔離。
RegionServer Group
RegionServer Group 技術是通過對 RegionServer 進行分組,不同的 RegionServer 分到不同的組。每個組可以按需掛載不同的表,並且當組內的表發生異常後,Region 不會遷移到其他的組。這樣,每個組就相當於一個邏輯上的子叢集,通過這種方式達到資源隔離的效果,降低管理成本,不必為每個高 SLA 的業務線單獨搭叢集。
如果想及時瞭解Spark、Hadoop或者Hbase相關的文章,歡迎關注微信公共帳號:iteblog_hadoop
從上圖可以看出,RegionServer 1 和 RegionServer 2 同屬於 iteblog Group 1,而且管理 Table 1 和 Table 3 兩張表;RegionServer 3 和 RegionServer 4 同屬於 iteblog Group 2,而且管理 Table 2 和 Table 4 兩張表。從使用者角度上看,RegionServer 1 和 RegionServer 2 看起來是屬於一個叢集;而 RegionServer 3 和 RegionServer 4 同屬於一個叢集,這兩個組之間均不互相影響。但是對於叢集運維人員來說,這就是一個 HBase 叢集,我們只需要運維這一個 HBase 叢集即可,大大降低了運維成本。
技術簡要介紹
在引入 RegionServer Group 技術之前,HBase 預設使用 StochasticLoadBalancer 策略(通過 hbase.master.loadbalancer.class 引數實現,參見HBASE-9555)將表的 Region 移動到 RegionServer 裡面去。這種策略被沒有考慮到 RegionServer Group 的資訊,所以如果要對 RegionServer 分組,我們就需要在移動 Region 的時候考慮到這些資訊。
基於這些資訊,社群開發出能夠識別出 RegionServer Group 資訊的 RSGroupBasedLoadBalancer,這個類和上面的 StochasticLoadBalancer都是實現了 LoadBalancer 介面的,詳見 HBASE-6721。
在預設情況下,所有的表和 RegionServer 都屬於 default 組。RSGroupBasedLoadBalancer 類具有識別組資訊的能力,所以在移動表的 Region 到 RegionServer 的時候會考慮到 RegionServer Group 資訊的。為了啟用這個特性,我們需要在 master 節點的 hbase-site.xml 檔案加入以下的配置:
<property> <name>hbase.coprocessor.master.classes</name> <value>org.apache.hadoop.hbase.rsgroup.RSGroupAdminEndpoint</value> </property> <property> <name>hbase.master.loadbalancer.class</name> <value>org.apache.hadoop.hbase.rsgroup.RSGroupBasedLoadBalancer</value> </property>
設定完之後需要重啟 master 節點。
RegionServer Group 技術新引入的命令
RegionServer Group 技術為我們帶來了以下13個新的 HBase shell 命令。使用下面的命令一定需要在 master 節點上的 hbase-site.xml 檔案配置好上面兩個屬性。否則將會出現 UnknownProtocolException: No registered Master Coprocessor Endpoint found for RSGroupAdminService 異常。如下所示:
hbase(main):002:0> list_rsgroups NAMESERVER / TABLE ERROR: org.apache.hadoop.hbase.exceptions.UnknownProtocolException: No registered Master Coprocessor Endpoint found for RSGroupAdminService. Has it been enabled? at org.apache.hadoop.hbase.master.MasterRpcServices.execMasterService(MasterRpcServices.java:802) at org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java) at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:413) at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:130) at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:324) at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:304) List all RegionServer groups. Optional regular expression parameter can be used to filter the output. Example: hbase> list_rsgroups hbase> list_rsgroups 'abc.*' Took 1.1077 seconds
-
list_rsgroups:列出所有的 RegionServer groups,我們可以在這個命令的後面使用正則表示式來過濾一些我們要的資訊。
-
get_rsgroup:獲取某個 RegionServer group 的資訊。
-
add_rsgroup:建立一個新的 RegionServer Group。
-
remove_rsgroup:刪除某個 RegionServer Group。
-
balance_rsgroup:對某個 RegionServer Group 進行 balance 操作。
-
move_servers_rsgroup:將 RegionServers 從一個組移動到另一個組。 RegionServer 中的所有 Region 都將移動到另一個 RegionServer 中。
-
move_tables_rsgroup:將表從一個 RegionServer Group 移動另一個 RegionServer Group。
-
move_namespaces_rsgroup:將指定名稱空間的表從一個 RegionServer Group 移動另一個 RegionServer Group。
-
move_servers_tables_rsgroup:將 RegionServers 和 Tables 從一個 RegionServer Group 移動另一個 RegionServer Group。
-
move_servers_namespaces_rsgroup:將指定名稱空間的 RegionServers 和 Tables 從一個 RegionServer Group 移動另一個 RegionServer Group。
-
get_server_rsgroup:獲取給定 RegionServer 所屬的 RegionServer Group。
-
get_table_rsgroup:獲取給定表所屬的 RegionServer Group。
-
remove_servers_rsgroup:從 RegionServer Group 中刪除已停用的 Region。 處於 Dead/recovering/live 狀態的 Region 將無法操作。
如何使用 RegionServer Group
我們前面說了,如果沒有建立 RegionServer Group 的話,HBase 預設的組只有 default,而且所有的表和 RegionServer 都屬於 default 組,如下:
hbase(main):001:0> list_rsgroups NAMESERVER / TABLE defaultserver 192.168.1.103:16020 server 192.168.1.103:16021 table hbase:meta table hbase:namespace table hbase:rsgroup 2 row(s) Took 1.4986 seconds
現在我們使用 add_rsgroup 命令建立了一個名為 iteblog_group 的組:
hbase(main):020:0> add_rsgroup 'iteblog_group' Took 0.0444 seconds hbase(main):021:0> list_rsgroups NAMESERVER / TABLE iteblog_group defaultserver 192.168.1.103:16020 server 192.168.1.103:16021 table hbase:meta table hbase:namespace table hbase:rsgroup 2 row(s) Took 0.0101 seconds
下面命令我們將 192.168.1.103:16021 RegionServer 移到了名為 iteblog_group 組裡面:
hbase(main):022:0> move_servers_rsgroup 'iteblog_group', ['192.168.1.103:16021'] Took 1.0220 seconds hbase(main):023:0> list_rsgroups NAMESERVER / TABLE iteblog_groupserver 192.168.1.103:16021 defaultserver 192.168.1.103:16020 table hbase:meta table hbase:namespace table hbase:rsgroup 2 row(s) Took 0.0102 seconds
我們已經看到了地址為 192.168.1.103:16021 的 RegionServer 已經移到名為 iteblog_group 的組了。現在我們來建立一張表 iteblog_table,並且把這張表移到名為 iteblog_group 的組裡面。為了演示 RegionServer Group 的作用,這裡我現在建立一張名為 iteblog_table 的表,並且設定了預分割槽,如下:
hbase(main):011:0> create 'iteblog_table', 'cf', SPLITS=>['10','20','30','40'] Created table iteblog_table Took 1.3884 seconds => Hbase::Table - iteblog_table hbase(main):013:0> get_table_rsgroup 'iteblog_table' default 1 row(s) Took 0.0281 seconds
從上面的輸出可以看到,建立表的時候,預設是屬於 default 組,雖然我們有兩個 RegionServer,而且設定了預分割槽,按正常情況, iteblog_table 的 Region 應該是會分佈在這兩個 RegionServer 上的。但實際上因為這兩個 RegionServer 的組不一樣,而且 iteblog_table 的組屬於 default,所有 iteblog_table 的 Region 全部位於 192.168.1.103:16020 上。正如下圖所示:
如果想及時瞭解Spark、Hadoop或者Hbase相關的文章,歡迎關注微信公共帳號:iteblog_hadoop
現在我們將表 iteblog_table 移到名為 iteblog_group 的組裡面,那屬於 iteblog_table 的 Region 也應該全部移到 iteblog_group 裡面的:
hbase(main):007:0> move_tables_rsgroup 'iteblog_group', ['iteblog_table'] Took 5.6177 seconds hbase(main):008:0> get_table_rsgroup 'iteblog_table' iteblog_group 1 row(s) Took 0.0202 seconds
我們已經看到 iteblog_table 所屬的組為 iteblog_group,從下圖也可以看到,iteblog_table 的所有 Region 全部移到了 192.168.1.103:16021 上。
如果想及時瞭解Spark、Hadoop或者Hbase相關的文章,歡迎關注微信公共帳號:iteblog_hadoop
好了,到這裡我們已經瞭解了 HBase RegionServer Group 技術,已經如何使用了。剩下的命令我就不再介紹,感興趣的同學可以自己再去學習。
從下週開始每週將在釘釘群裡【直播技術分享】和專家面對面【線上回答技術問題】,感興趣的同學加入啊~ 每週具體直播時間,請關注釘釘群內群公告。
【號外號外】為了更好的服務咱們HBase開發者,HBase技術社群釘釘企業號大群建立啦:
釘釘直播入群方式:
https://dwz.cn/Fvqv066s
猜你喜歡
歡迎關注本公眾號: iteblog_hadoop :
回覆 spark_summit_201806 下載 Spark Summit North America 201806 全部PPT
回 復 spark_summit_eu_2018 下載 Spark+AI Summit europe 2018 全部PPT
0、回覆 電子書 獲取 本站所有可下載的電子書
1、 ofollow,noindex">Apache Spark 統一記憶體管理模型詳解
2、 Elasticsearch 6.3 釋出,你們要的 SQL 功能來了
3、 即將釋出的 Apache Spark 2.4 都有哪些新功能
4、 乾貨 | 深入理解 Spark Structured Streaming
5、 36061a63e361afca134&scene=21#wechat_redirect" target="_blank" rel="nofollow,noindex"> Apache Spark 黑名單(Blacklist)機制介紹
6、 Kafka分割槽分配策略(Partition Assignment Strategy)
7、 Spark SQL 你需要知道的十件事
8、 乾貨 | Apache Spark 2.0 作業優化技巧
10、 Flink Forward 201809PPT資料下載
11、更多大資料文章歡迎訪問 https://www.iteblog.com 及本公眾號( iteblog_hadoop )
12、Flink中文文件:
http://flink.iteblog.com
13、Carbondata 中文文件 :
http://carbondata.iteblog.com