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
列表中。它将被删除。
rsgroup 功能的作者,雅虎! HBase 工程团队已经在他们的网格上运行了很长一段时间,并根据他们的经验提出了一些最佳实践。
有一个系统 rsgroup,其中所有系统表都是或者只是将系统表保留在default
rsgroup 中,并且所有用户空间表都在非default
rsgroups 中。
雅虎已经发现它在规模上有用,可以保留特殊的死组或可疑节点组;这是一种让它们在运行之前保持运行的方法。
小心替换 rsgroup 中的死节点。确保在开始移除死亡之前有足够的活动节点。如果必须,首先移动好的实时节点。
查看主日志将为您提供有关 rsgroup 操作的信息。
如果卡住,请重新启动主进程。
除了从hbase-site.xml
中删除相关属性之外,从启用了它的群集中删除 RegionServer 分组功能还涉及更多步骤。这是为了清除 RegionServer 分组相关的元数据,以便在将来重新启用该功能时,旧的元数据不会影响群集的功能。
default
regionserver 组#Reassigning table t1 from non default group - hbase shell
hbase(main):005:0> move_tables_rsgroup 'default',['t1']
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']
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
rsgroup
#From ZK remove the node /hbase/rsgroup through zkCli.sh
rmr /hbase/rsgroup
要启用 ACL,请将以下内容添加到 hbase-site.xml 并重新启动 Master:
<property>
<name>hbase.security.authorization</name>
<value>true</value>
<property>