RegionServer Grouping(A.K.A rsgroup)是一种高级功能,用于将区域服务器划分为独特的组以进行严格隔离。它只应由足够复杂的用户使用,以便了解完整的含义并具有足够的背景来管理 HBase 集群。它是由雅虎开发的!并且他们在大型网格集群上大规模运行它。请参阅雅虎的 HBase!比例

RSGroups 是使用 shell 命令定义和管理的。 shell 驱动一个 Coprocessor 端点,其 API 被标记为私有,因为这是一个不断发展的功能;协处理器 API 不供公众使用。可以将服务器添加到具有主机名和端口对的组中,并且可以将表移动到该组,以便只有同一 rsgroup 中的区域服务器可以托管表的区域。 RegionServers 和表一次只能属于一个 rsgroup。默认情况下,所有表和区域服务器都属于default rsgroup。系统表也可以使用常规 API 放入 rsgroup。自定义平衡器实现跟踪每个 rsgroup 的分配,并确保将区域移动到该 rsgroup 中的相关区域服务器。 rsgroup 信息存储在常规 HBase 表中,并且在集群引导时使用基于 zookeeper 的只读缓存。

要启用,请将以下内容添加到 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> 

然后使用 shell rsgroup 命令创建和操作 RegionServer 组:例如添加一个 rsgroup,然后添加一个服务器。要查看 hbase shell 类型中可用的 rsgroup 命令列表,请执行以下操作:

 hbase(main):008:0> help ‘rsgroup’
 Took 0.5610 seconds 

高级别,使用 _add rsgroup 命令创建一个不同于default组的 rsgroup。然后使用 _move_servers rsgroup 和 _move_tables rsgroup 命令将服务器和表添加到该组。如果表格很慢,请使用 _balance rsgroup 命令迁移到组专用服务器(如果不需要),则必要时为组运行余额。要监视命令的效果,请参阅 Master UI 主页末尾的Tables选项卡。如果单击某个表,则可以查看它所部署的服务器。您应该在这里看到使用 shell 命令完成的分组的反映。如果出现问题,请查看主日志。

以下是使用一些 rsgroup 命令的示例。要添加组,请执行以下操作:

 hbase(main):008:0> add_rsgroup 'my_group'
 Took 0.5610 seconds 

必须启用 RegionServer Groups

如果尚未在主服务器中启用 rsgroup 协处理器端点,并且运行任何 rsgroup shell 命令,您将看到如下错误消息:

ERROR: org.apache.hadoop.hbase.exceptions.UnknownProtocolException: No registered master coprocessor service found for name RSGroupAdminService
    at org.apache.hadoop.hbase.master.MasterRpcServices.execMasterService(MasterRpcServices.java:604)
    at org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java)
    at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:1140)
    at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:133)
    at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:277)
    at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:257) 

使用 _move_servers rsgroup 命令将服务器(由主机名+端口指定)添加到刚创组中,如下所示:

 hbase(main):010:0> move_servers_rsgroup 'my_group',['k.att.net:51129'] 

主机名和端口与 ServerNam

rsgroup 功能是指群集中仅具有主机名和端口的服务器。它不使用标识 RegionServers 的 HBase ServerName 类型; ie hostname + port + starttime 来区分 RegionServer 实例。 rsgroup 功能在 RegionServer 重新启动时保持工作,因此 ServerName 的启动时间 - 因此 ServerName 类型 - 不合适。管理

服务器在群集的生命周期中来回走动。目前,您必须手动将 rsgroups 中引用的服务器与正在运行的集群中的节点的实际状态对齐。我们的意思是,如果您停用服务器,那么您必须更新 rsgroups 作为服务器停用过程中删除引用的一部分。

但是,你说没有 _remove_offline_servers_rsgroup_command!

删除服务器的方法是将其移动到default组。 default组很特别。所有 rsgroup,但default rsgroup,都是静态的,因为通过 shell 命令进行的编辑会持久保存到系统hbase:rsgroup表中。如果它们引用了已停用的服务器,则需要更新它们以撤消引用。

default组与其他 rsgroup 不同,因为它是动态的。其服务器列表镜像了集群的当前状态;即如果您关闭属于default rsgroup 的服务器,然后执行 _get rsgroup default以在 shell 中列出其内容,则将不再列出服务器。对于非default组,虽然模式可能处于脱机状态,但它将保留在非default组的服务器列表中。但是,如果将脱机服务器从非默认 rsgroup 移动到默认值,它将不会显示在default列表中。它将被删除。

162.1。最佳实践

rsgroup 功能的作者,雅虎! HBase 工程团队已经在他们的网格上运行了很长一段时间,并根据他们的经验提出了一些最佳实践。

162.1.1。隔离系统表

有一个系统 rsgroup,其中所有系统表都是或者只是将系统表保留在default rsgroup 中,并且所有用户空间表都在非default rsgroups 中。

162.1.2。死节点

雅虎已经发现它在规模上有用,可以保留特殊的死组或可疑节点组;这是一种让它们在运行之前保持运行的方法。

小心替换 rsgroup 中的死节点。确保在开始移除死亡之前有足够的活动节点。如果必须,首先移动好的实时节点。

162.2。故障排除

查看主日志将为您提供有关 rsgroup 操作的信息。

如果卡住,请重新启动主进程。

162.3。删除 RegionServer 分组

除了从hbase-site.xml中删除相关属性之外,从启用了它的群集中删除 RegionServer 分组功能还涉及更多步骤。这是为了清除 RegionServer 分组相关的元数据,以便在将来重新启用该功能时,旧的元数据不会影响群集的功能。

  • 将非默认 rsgroup 中的所有表移动到default regionserver 组
#Reassigning table t1 from non default group - hbase shell
hbase(main):005:0> move_tables_rsgroup 'default',['t1'] 
  • 将非默认 rsgroup 中的所有 regionservers 移动到default regionserver 组
#Reassigning all the servers in the non-default rsgroup to default - hbase shell
hbase(main):008:0> move_servers_rsgroup 'default',['rs1.xxx.com:16206','rs2.xxx.com:16202','rs3.xxx.com:16204'] 
  • 删除所有非默认 rsgroups。隐式创建的default rsgroup 不必删除
#removing non default rsgroup - hbase shell
hbase(main):009:0> remove_rsgroup 'group2' 
  • 删除hbase-site.xml中所做的更改并重新启动群集

  • hbase中删除表hbase:rsgroup

#Through hbase shell drop table hbase:rsgroup
hbase(main):001:0> disable 'hbase:rsgroup'
0 row(s) in 2.6270 seconds

hbase(main):002:0> drop 'hbase:rsgroup'
0 row(s) in 1.2730 seconds 
  • 使用 zkCli.sh 从集群 ZooKeeper 中删除 znode rsgroup
#From ZK remove the node /hbase/rsgroup through zkCli.sh
rmr /hbase/rsgroup 

162.4。 ACL

要启用 ACL,请将以下内容添加到 hbase-site.xml 并重新启动 Master:

<property>
  <name>hbase.security.authorization</name>
  <value>true</value>
<property>