Uploaded image for project: 'HBase'
  1. HBase
  2. HBASE-22514

Reimplement rsgroup feature and move it into core of HBase

    XMLWordPrintableJSON

    Details

    • Type: Umbrella
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 3.0.0-alpha-1
    • Component/s: Admin, Client, rsgroup
    • Labels:
      None
    • Hadoop Flags:
      Incompatible change, Reviewed
    • Release Note:
      Hide
      Moved rs group feature into core. Use this flag 'hbase.balancer.rsgroup.enabled' to enable or disable it.

      The coprocessor org.apache.hadoop.hbase.rsgroup.RSGroupAdminEndpoint is deprected, but for compatible, if you want the pre 3.0.0 hbase client/shell to communicate with the new hbase cluster, you still need to add this coprocessor to master. And if this coprocessor is specified, the above flag will be set to true automatically to enable rs group feature.

      These methods are added to the Admin/AsyncAdmin interface for managing rs groups. See the javadoc of these methods for more details.

        void addRSGroup(String groupName) throws IOException;
        RSGroupInfo getRSGroup(String groupName) throws IOException;
        RSGroupInfo getRSGroup(Address hostPort) throws IOException;
        RSGroupInfo getRSGroup(TableName tableName) throws IOException;
        List<RSGroupInfo> listRSGroups() throws IOException;
        List<TableName> listTablesInRSGroup(String groupName) throws IOException;
        Pair<List<String>, List<TableName>> getConfiguredNamespacesAndTablesInRSGroup(String groupName) throws IOException;
        void removeRSGroup(String groupName) throws IOException;
        void removeServersFromRSGroup(Set<Address> servers) throws IOException;
        void moveServersToRSGroup(Set<Address> servers, String targetGroup) throws IOException;
        void setRSGroup(Set<TableName> tables, String groupName) throws IOException;
        boolean balanceRSGroup(String groupName) throws IOException;

      The shell commands for rs group are not changed.

      The main difference on the implementation is that, now the rs group for a table is stored in TableDescriptor, instead of in RSGroupInfo, so the getTables method of RSGroupInfo has been deprecated. And if you use the above Admin methods to get the RSGroupInfo, its getTables method will always return empty. Of course the behavior for the old RSGroupAdminEndpoint is not changed, we will fill the tables field of the RSGroupInfo before returning, to make it compatible with old hbase client/shell.

      When upgrading, the migration between the RSGroupInfo and TableDescriptor will be done automatically. It will take sometime, but it is fine to restart master in the middle, the migration will continue after restart.

      Show
      Moved rs group feature into core. Use this flag 'hbase.balancer.rsgroup.enabled' to enable or disable it. The coprocessor org.apache.hadoop.hbase.rsgroup.RSGroupAdminEndpoint is deprected, but for compatible, if you want the pre 3.0.0 hbase client/shell to communicate with the new hbase cluster, you still need to add this coprocessor to master. And if this coprocessor is specified, the above flag will be set to true automatically to enable rs group feature. These methods are added to the Admin/AsyncAdmin interface for managing rs groups. See the javadoc of these methods for more details.   void addRSGroup(String groupName) throws IOException;   RSGroupInfo getRSGroup(String groupName) throws IOException;   RSGroupInfo getRSGroup(Address hostPort) throws IOException;   RSGroupInfo getRSGroup(TableName tableName) throws IOException;   List<RSGroupInfo> listRSGroups() throws IOException;   List<TableName> listTablesInRSGroup(String groupName) throws IOException;   Pair<List<String>, List<TableName>> getConfiguredNamespacesAndTablesInRSGroup(String groupName) throws IOException;   void removeRSGroup(String groupName) throws IOException;   void removeServersFromRSGroup(Set<Address> servers) throws IOException;   void moveServersToRSGroup(Set<Address> servers, String targetGroup) throws IOException;   void setRSGroup(Set<TableName> tables, String groupName) throws IOException;   boolean balanceRSGroup(String groupName) throws IOException; The shell commands for rs group are not changed. The main difference on the implementation is that, now the rs group for a table is stored in TableDescriptor, instead of in RSGroupInfo, so the getTables method of RSGroupInfo has been deprecated. And if you use the above Admin methods to get the RSGroupInfo, its getTables method will always return empty. Of course the behavior for the old RSGroupAdminEndpoint is not changed, we will fill the tables field of the RSGroupInfo before returning, to make it compatible with old hbase client/shell. When upgrading, the migration between the RSGroupInfo and TableDescriptor will be done automatically. It will take sometime, but it is fine to restart master in the middle, the migration will continue after restart.

      Description

      The class RSGroupAdminClient is not public 

      we need to use java api  RSGroupAdminClient  to manager RSG 

      so  RSGroupAdminClient should be public

       

        Attachments

        1. HBASE-22514.master.001.patch
          1 kB
          Yechao Chen
        2. image-2019-05-31-18-25-38-217.png
          12 kB
          Yechao Chen
        There are no Sub-Tasks for this issue.

          Activity

            People

            • Assignee:
              zhangduo Duo Zhang
              Reporter:
              chenyechao Yechao Chen
            • Votes:
              0 Vote for this issue
              Watchers:
              12 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: