一文了解华为FusionInsight MRS HBase的集群隔离方案RSGroup
摘要: RSGroup是集群隔离方案。
本文分享自华为云社区《华为FusionInsight MRS HBase的集群隔离——RSGroup》,作者: MissAverage。
一、HBase RSGroup理解
RSGroup是集群隔离方案。
HBase原有的资源隔离:为多个用户共享同一个HBase集群,提供了资源隔离的能力。
- NameSpace,将不同业务的表隔离在不同的namespace是一个最简单的资源隔离的方法。【轻量】
- ACL(Access Control Lists),用于限制不同的用户对不同的资源的操作或访问权限。
1.1 运维成本与集群资源利用问题
同一个 HBase 集群使用的用户越来越多,不同用户之间的读写或者不同表的 compaction、region splits 操作可能对其他用户或表产生了影响。将所有业务的表都存放在一个集群的好处是可以很好的利用整个集群的资源,只需要一套运维系统。
如果一个业务或者一个部门使用一个 HBase 集群,这样会导致 HBase 集群的数量越来越多,直接导致了运维成本的增加。而且集群的分离也会导致资源的浪费,有些集群资源过剩,有些集群资源不足,这种情况我们无法充分利用不同集群的资源。将集群按照业务或部门分开的好处是可以很好的隔离不同表、不同用户之间的影响。
1.2 RSGroup方案原理
官方版本集成了yahoo提交的rsgroup隔离方案。
如下图所示:
在上图中有两个rsgroup,具体原理为:
A、将不同的RegionServer分配到不同的rsgroup中
上图中RegionServer1、RegionServer2、RegionServer3被分配到了Important_group中,RegionServer4、RegionServer5、RegionServer6被分配到了normal_group中。
B、将不同的表分配到不同的group中
上图中表t1和t2分配到了Important_group,表t3和t4分配到了normal_group。
C、表、regionserver分配到具体的rsgroup后就达到了隔离的效果
做好分配后,以表t1为例,t1的所有region都只会落到Important_group所属的Regionserver中。此时当normal_group的任何Regionserver异常,都不会引起t1表的异常(datanode异常会有影响,后面有说明)。只有当Important_group所属的Regionserver异常,并且有t1的region落在该regionserver上才会有影响。表代着业务,你可以将同类型(重要等级)的表放在同一个rsgroup中,这就实现了不同业务的隔离。
对于于重点业务,可以分配更多的regionserver的机器,负载更低;而对于非重点业务,则可以更少的机器承担负更多的业务。目前datanode已经支持了分级存储,甚至可以将重点业务使用不同的介质,比如SSD。
总结:RegionServer Group 技术是通过对 RegionServer 进行分组,不同的 RegionServer 分到不同的组。每个组可以按需挂载不同的表,并且当组内的表发生异常后,Region 不会迁移到其他的组。这样,每个组就相当于一个逻辑上的子集群,通过这种方式达到资源隔离的效果,降低管理成本,不必为每个业务线单独搭集群。
1.3 RSGroup隔离优缺点
优点:
- 管理方便
- 充分利用集群的资源
- 机器腾挪扩容很方便
- 有利于整个集群性能的提升
缺点:
- 隔离不彻底,hdfs层还是共用,如果datanode出现异常,还是会影响到多个业务。
1.4 RSGroup issue
http://issues.apache.org/jira/browse/HBASE-6721
RegionServer Group based Assignment
该补丁增加了一个新的实验模块hbase-rsgroup。它是一个高级特性,可以将regionserver划分成不同的组,以严格隔离,只有足够成熟的用户才能使用它,这些用户必须了解其全部含义,并且有足够管理HBase集群的背景。
在HBase的多租户部署中,RegionServer很可能会为不同客户端应用程序拥有的多个不同表提供Region服务。
能够对运行的RegionServer的子集进行分组并为其分配特定的表,为客户端应用程序提供了隔离和资源分配的级别。
提议的实质上是存在一个AssignmentManager,它知道RSGroup,并根据RSGroup向RegionServer分配表。负载平衡也将按组进行
二、RSGroup使用(以FusionInsight 8.0.2 --HBase 内核版本2.2.3为背景)
2.1 RSGroup相关配置
1) hbase.master.loadbalancer.class
【说明】负载均衡发生用来执行region均衡的类。当使用RSGroup时,该值必须是org.apache.hadoop.hbase.rsgroup.RSGroupBasedLoadBalancer,原值需要设置到hbase.rsgroup.grouploadbalancer.class中。
【默认值】org.apache.hadoop.hbase.rsgroup.RSGroupBasedLoadBalancer
<name>hbase.master.loadbalancer.class</name>
<value>org.apache.hadoop.hbase.rsgroup.RSGroupBasedLoadBalancer</value>
在引入RSGroup技术之前,HBase默认使用StochasticLoadBalancer策略(通过hbase.master.loadbalancer.class参数实现,参见HBASE-9555)将表的 Region 移动到 RegionServer里面去。
这种策略并没有考虑到RegionServer Group的信息,所以如果要对RegionServer分组,我们就需要在移动Region的时候考虑到这些信息。
基于这些信息,社区开发出能够识别出RSGroup信息的 RSGroupBasedLoadBalancer,这个类和上面的StochasticLoadBalancer都是实现了LoadBalancer接口的,详见 HBASE-6721。
2) hbase.coprocessor.master.classes
【说明】逗号隔开的org.apache.hadoop.hbase.coprocessor.MasterObserver coprocessors列表,在主HMaster中默认加载。对于实现了协处理器的所有方法,本配置列表将被顺序调用。当实现了自己的MaterObserver时,只要将它加入到HBase的classpath并且类名全称添加到本配置列表即可。
<name>hbase.coprocessor.master.classes</name>
<value>org.apache.hadoop.hbase.hindex.server.master.HIndexMasterCoprocessor,com.huawei.hadoop.hbase.backup.services.RecoveryCoprocessor,org.apache.hadoop.hbase.security.access.ReadOnlyClusterEnabler,org.apache.hadoop.hbase.rsgroup.RSGroupAdminEndpoint </value>
3) hbase.rsgroup.fallback.enable
【说明】当Region所在的RSGroup没有在线的RegionServer时,是否允许Region在默认的RSGroup或者其他的RSGroup短暂上线。[HBASE-24760]
【默认值】true
【注意】使用该功能时,balancer必须打开,否则Region可能在错误的RSGroup上线。关闭该功能时,会影响滚动重启失败。
<name>hbase.rsgroup.fallback.enable</name>
<value>true</value>
4) hbase.rsgroup.grouploadbalancer.class
【说明】负载均衡发生用来执行region均衡的类。当未使用RSGroup时,该参数不生效。
<name>hbase.rsgroup.grouploadbalancer.class</name>
<value>org.apache.hadoop.hbase.master.balancer.StochasticLoadBalancer</value>
5) hbase.priority.rsgroup.enabled
【说明】Priority RSGroup功能开关。开启后,该RSGroup中表的数据副本会按照策略优先存放到Priority RSGroup和default RSGroup中的数据节点。故障恢复时,priority RSGroup的节点会优先处理。
【默认值】false
<name>hbase.priority.rsgroup.enabled</name>
<value>false</value>
2.2. RSGroup相关Shell命令
1) add_rsgroup
创建新的RSGroup。
2) alter_rsgroup_config
更新RSGroup配置。
3) balance_rsgroup
对某个RSGroup进行balance操作。
4) get_rsgroup
获取RSGroup组信息,将列举RSGRoup包含的所有servers和tables。
5) get_server_rsgroup
查看RSGroup组信息。
6) get_table_rsgroup
查看RSGroup组信息。将列举RSGRoup包含的所有servers和tables。
7) list_rsgroups
查看RSGroup组信息。
8) move_namespaces_rsgroup
移动指定namespace到RSGroup。原namespace下的表可能位于不同的RSGroup,执行该命令时,均一起移动至同一RSGroup。
9) move_servers_namespaces_rsgroup
移动指定namespace及regionserver到RSGroup
10) move_servers_rsgroup
移动RegionServer到指定RSGroup,其上的region将移动到原RSGroup的另一RegionServer上。
11) move_servers_tables_rsgroup
将RegionServers和表从一个RSGroup 移动到另一个 RSGroup。
12) move_tables_rsgroup
将表从一个RSGroup移动另一个RSGroup。将指定的表添加到RSGroup,表的region都会转移到该RSGroup内的RegionServer上。无法将表移动到无RegionServer存在的RSGroup,将报错。
13) remove_rsgroup
删除指定RSGroup。存在table和regionserver的非空RSGroup不可以被remove。
14) remove_servers_rsgroup
从RSGroup中删除已退服的Region server。 无法对处于Dead/recovering/live状态的Region server进行该操作。
15) rename_rsgroup
删除指定RSGroup。
16) show_rsgroup_config
显示RSGroup配置。
三、RSGroup实现
3.1 Coprocessor相关
扩展RSGroup 是Coprocessor的应用场景之一。Coprocessor可以扩展HBase接口能力且不影响主流程。如果用户想实现增删改查之外其它接口,这些接口可能既不是table的接口,也不是Master的接口,那么Coprocessor是一个较好的选择。Coprocessor可以通过封装服务逻辑的方式,在HBase里面重新建立一个RPC服务。
Coprocessor分为Observer和Endpoint两种:
1) Observer协处理器类似于RDBMS中的触发器,因为它在特定事件(如Get或Put)发生之前或之后执行代码。
2) Endpoint协处理器类似于RDBMS中的存储过程,因为它允许在RegionServer本身而不是在客户端上对数据执行自定义计算。
3.1.1 RSGroup核心功能模块
RSGroup的核心功能模块有以下几个:proto文件,AdminEndpoint,Servicelmpl,Client,Server和BasedLoadBalancer等。AdminEndpoint实现MasterCoprocessor和MasterObserver。Service没有使用Endpoint来实现,而是自己写了RSGroupAdminServiceImpl类实现。Client真正的业务逻辑在RsGroupAdminServer和BasedLoadBalancer里面。
3.2 proto文件
3.2.1 【hbase-protocol】 RSGroup.proto
定义了RSGroupInfo message。
message RSGroupInfo {
required string name = 1;
repeated ServerName servers = 4;
repeated TableName tables = 3;
repeated NameStringPair configuration = 5;
}
3.2.2 【hbase-rsgroup】 RSGroupAdmin.proto
定义了多个 message数据结构,以及service RSGroupAdminService。
service RSGroupAdminService {
rpc GetRSGroupInfo(GetRSGroupInfoRequest)
returns (GetRSGroupInfoResponse);
rpc GetRSGroupInfoOfTable(GetRSGroupInfoOfTableRequest)
returns (GetRSGroupInfoOfTableResponse);
rpc GetRSGroupInfoOfServer(GetRSGroupInfoOfServerRequest)
returns (GetRSGroupInfoOfServerResponse);
rpc MoveServers(MoveServersRequest)
returns (MoveServersResponse);
rpc MoveTables(MoveTablesRequest)
returns (MoveTablesResponse);
rpc AddRSGroup(AddRSGroupRequest)
returns (AddRSGroupResponse);
rpc RemoveRSGroup(RemoveRSGroupRequest)
returns (RemoveRSGroupResponse);
rpc BalanceRSGroup(BalanceRSGroupRequest)
returns (BalanceRSGroupResponse);
rpc ListRSGroupInfos(ListRSGroupInfosRequest)
returns (ListRSGroupInfosResponse);
rpc MoveServersAndTables(MoveServersAndTablesRequest)
returns (MoveServersAndTablesResponse);
rpc RemoveServers(RemoveServersRequest)
returns (RemoveServersResponse);
rpc RenameRSGroup(RenameRSGroupRequest)
returns (RenameRSGroupResponse);
rpc UpdateRSGroupConfig(UpdateRSGroupConfigRequest)
returns (UpdateRSGroupConfigResponse);
}
RSGroupAdminService由RSgroupAdminEndpoint.RSGroupServiceImpl类继承实现,调用RSGroupAdminServer进行实际工作,将结果转换为protocol buffer response;如果发生异常处理异常,然后使用RpcCallback进行response。
3.3 RSGroupAdmin
[hbase-rsgroup] org.apache.hadoop.hbase.rsgroup. RSGroupAdmin
接口,定义了client和server之间的RSGroup用户API接口。
RSGroupInfo getRSGroupInfo(String groupName) throws IOException;
RSGroupInfo getRSGroupInfoOfTable(TableName tableName) throws IOException;
void moveServers(Set<Address> servers, String targetGroup) throws IOException;
void moveTables(Set<TableName> tables, String targetGroup) throws IOException;
void addRSGroup(String groupName) throws IOException;
void removeRSGroup(String groupName) throws IOException;
boolean balanceRSGroup(String groupName) throws IOException;
List<RSGroupInfo> listRSGroups() throws IOException;
RSGroupInfo getRSGroupOfServer(Address hostPort) throws IOException;
void moveServersAndTables(Set<Address> servers, Set<TableName> tables,
String targetGroup) throws IOException;
default void removeServers(Set<Address> servers) throws IOException {
removeServers(servers, false);
}
void removeServers(Set<Address> servers, boolean forceRemove) throws IOException;
void renameRSGroup(String oldName, String newName) throws IOException;
void updateRSGroupConfig(String groupName, Map<String, String> configuration) throws IOException;
3.4 RSGroupAdminClient
[hbase-rsgroup] org.apache.hadoop.hbase.rsgroup. RSGroupAdminClient
实现RSGroupAdmin接口。
3.5 RSGroupAdminServer
[hbase-rsgroup] org.apache.hadoop.hbase.rsgroup. RSGroupAdminServer
实现RSGroupAdmin接口。
3.6 RSGroupProtobufUtil
[hbase-rsgroup] org.apache.hadoop.hbase.rsgroup. RSGroupProtobufUtil
实现了两个方法分别进行RSGroupProtos.RSGroupInfo和【hbase-common】org.apache.hadoop.hbase.rsgroup. RSGroupInfo的转换
3.7 RSGroupProtobufUtil
[hbase-rsgroup] org.apache.hadoop.hbase.rsgroup. RSGroupProtobufUtil
实现了两个方法分别进行RSGroupProtos.RSGroupInfo和【hbase-common】org.apache.hadoop.hbase.rsgroup. RSGroupInfo的转换。
static RSGroupInfo toGroupInfo(RSGroupProtos.RSGroupInfo proto)
static RSGroupProtos.RSGroupInfo toProtoGroupInfo(RSGroupInfo pojo)
其中:
toGroupInfo的调用在RSGroupAdminClient和RSGroupInfoManagerImpl中。(除了测试代码)
toProtoGroupInfo的调用在RSGroupAdminEndpoint.RSGroupAdminServiceImpl中和RSGroupInfoManagerImpl中。
以上,是对HBase集群隔离方案RSGroup的背景、应用及模块实现介绍说明。
参考
- 一文读懂HBase多租户
- RegionServer Group based Assignment
一文了解华为FusionInsight MRS HBase的集群隔离方案RSGroup的更多相关文章
- 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解
引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...
- HADOOP+SPARK+ZOOKEEPER+HBASE+HIVE集群搭建(转)
原文地址:https://www.cnblogs.com/hanzhi/articles/8794984.html 目录 引言 目录 一环境选择 1集群机器安装图 2配置说明 3下载地址 二集群的相关 ...
- CentOS6安装各种大数据软件 第六章:HBase分布式集群的配置
相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...
- [推荐]Hadoop+HBase+Zookeeper集群的配置
[推荐]Hadoop+HBase+Zookeeper集群的配置 Hadoop+HBase+Zookeeper集群的配置 http://wenku.baidu.com/view/991258e881c ...
- Hbase的集群安装
hadoop集群的搭建 搭建真正的zookeeper集群 Hbase需要安装在成功部署的Hadoop平台,并且要求Hadoop已经正常启动. 同时,HBase需要集群部署,我们分别把HBase 部署到 ...
- Apache DolphinScheduler 使用文档(2-3/8):集群规划及环境准备
本文章经授权转载,原文链接: https://blog.csdn.net/MiaoSO/article/details/104770720 目录 2. 集群规划 2.1 集群配置 2.2 软件版本 2 ...
- HBase数据库集群配置
0,HBase简介 HBase是Apache Hadoop中的一个子项目,是一个HBase是一个开源的.分布式的.多版本的.面向列的.非关系(NoSQL)的.可伸缩性分布式数据存储模型,Hbase依托 ...
- Cobar使用文档(可用作MySQL大型集群解决方案)
原文:http://my.oschina.net/ydsakyclguozi/blog/374564 最近好不容易抽空研究了下Cobar,感觉这个产品确实很不错(在文档方面比Amoeba强多了),特此 ...
- [精华]Hadoop,HBase分布式集群和solr环境搭建
1. 机器准备(这里做測试用,目的准备5台CentOS的linux系统) 1.1 准备了2台机器,安装win7系统(64位) 两台windows物理主机: 192.168.131.44 adminis ...
- hbase分布式集群搭建
hbase和hadoop一样也分为单机版.伪分布式版和完全分布式集群版本,这篇文件介绍如何搭建完全分布式集群环境搭建. hbase依赖于hadoop环境,搭建habase之前首先需要搭建好hadoop ...
随机推荐
- python读取文本数据某一列
import codecs f = codecs.open('test1 - 副本.txt', mode='r', encoding='utf-8') # 打开txt文件,以'utf-8'编码读取 l ...
- SpringBoot自定义注解+异步+观察者模式实现业务日志保存
一.前言 我们在企业级的开发中,必不可少的是对日志的记录,实现有很多种方式,常见的就是基于AOP+注解进行保存,但是考虑到程序的流畅和效率,我们可以使用异步进行保存,小编最近在spring和sprin ...
- Python基础之函数:3、多层语法糖、装饰器和装饰器修复技术及递归函数
目录 一.多层语法糖 1.什么是多层语法糖: 2.多层语法糖用法: 二.有参装饰器 1.什么是有参装饰器: 2.有参装饰器的作用: 三.装饰器修复技术 1.什么是装饰器修复技术: 四.递归函数 1.什 ...
- 手记系列之二 ----- 关于IDEA的一些使用方法经验
前言 本篇文章主要介绍的关于本人在使用IDEA的一些使用方法,一些常用设置,一些插件推荐和使用.请注意,本文特长,2w多字加上几十张图片,建议收藏观看~ 前提准备 idea官网: https://ww ...
- "xxx cannot be cast to jakarta.servlet.Servlet "报错解决方式
在做jsp的上机时候同学出现了一个500错误:com.kailong.servlet.ComputeBill cannot be cast to jaka.servlet.Servlet 然后因为我用 ...
- Java项目有可能做到所有的代码逻辑均可热部署吗?
前言 首先我们明确下什么叫做热部署,热部署是在不重启java虚拟机的前提下,自动更新class的行为,从而更新整个运行时的逻辑. 在java开发领域,热部署一直是一个难以解决的问题,java虚拟机理论 ...
- Go语言核心36讲05
你已经使用过Go语言编写了小命令(或者说微型程序)吗? 当你在编写"Hello, world"的时候,一个源码文件就足够了,虽然这种小玩意儿没什么用,最多能给你一点点莫名的成就感. ...
- HDC.Cloud Day | 全国首场上海站告捷,聚开发者力量造梦、探梦、筑梦
摘要:11月20日,首个华为云开发者日HDC.Cloud Day在上海成功举行. 本文分享自华为云社区<HDC.Cloud Day | 全国首场上海站告捷,聚开发者力量造梦.探梦.筑梦>, ...
- 第2-4-1章 规则引擎Drools介绍-业务规则管理系统-组件化-中台
目录 规则引擎 Drools 1. 问题引出 2. 规则引擎概述 2.1 什么是规则引擎 2.2 使用规则引擎的优势 2.3 规则引擎应用场景 2.4 Drools介绍 规则引擎 Drools 全套代 ...
- 漫谈计算机网络: 运输层 ------ 从UDP ->TCP , 从面向通信->面向用户,三次握手/四次挥手?
面试答不上?计网很枯燥? 听说你学习 计网 每次记了都会忘? 不妨抽时间和我一起多学学它 深入浅出,用你的空闲时间来探索计算机网络的硬核知识! 博主的上篇连载文章<初识图像处理技术> 图像 ...