hbaseregions

How to get regionservers' startcode in a HBase cluster?


my HBase cluster's load unbalanced, so i want to move some regions of table from one regionsserver to other, but it seems that a startcode of a regionserver is needed to do this,how can i get this startcode?

i noticed that someone's master-status page is like this: other's master-status page

but mine is like this: my master-status page

where can i get the startcode?

actually, i want to move a region from regionserver k3 to regionserver k2, and the regions on k3 are: regions on k3

how can i do this? in detail :)


Solution

  • okay, finally i worked it out.

    /*
     * Copyright: Copyright (c) 2012 Kaliumn
     * 
     * @Description: get regionservers' startcode in a hbase cluster
     * 
     */
    
    package test.hbase;
    
    import java.util.Collection;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.HServerInfo;
    import org.apache.hadoop.hbase.MasterNotRunningException;
    import org.apache.hadoop.hbase.ServerName;
    import org.apache.hadoop.hbase.ZooKeeperConnectionException;
    import org.apache.hadoop.hbase.client.HBaseAdmin;
    import org.apache.hadoop.hbase.ipc.HMasterInterface;
    import org.gfg.kalium.server.hbaseutil.HConfUtils;
    
    /**
     * class <code> GetStartcode </code> is used to get regionservers' startcode
     * 
     * @author <a href="mailto:ml.huang@kaliumn.com">Meilong Huang</a>
     * @version v1.0.0
     * @date 2012-6-26 05:24:10
     * 
     */
    
    public class GetStartcode {
    
        /**
         * get regionservers' startcode
         * 
         * @param args
         * @throws ZooKeeperConnectionException
         * @throws MasterNotRunningException
         */
        public static void main(String[] args) throws MasterNotRunningException,
                ZooKeeperConnectionException {
            Configuration conf = HConfUtils
                    .setHbaseConf("k2.ccntgrid.org,k3.ccntgrid.org,k4.ccntgrid.org");
            HBaseAdmin admin = new HBaseAdmin(conf);
            HMasterInterface master = admin.getMaster();
            Collection<ServerName> rs = master.getClusterStatus().getServerInfo();
            for (ServerName r : rs) {
                System.out.println(r.getHostname());
                System.out.println(r.getServerName());
                System.out.println(r.getStartcode());
                System.out.println("+++++++++++++++++");
            }
        }
    }
    

    actually, startcode is the last part of the 'servername'.

    these commands will finish moving regions from one regionserver to other:

    > ka@k1 bin % pwd
    > /opt/kalium/hbase/bin
    
    
    > ka@k1 bin % echo "move '3504a80cd4047f78834bcf58bf169e62', 'k4.ccntgrid.org,60020,1340682441023'" | ./hbase shell 
    > HBase Shell; enter 'help<RETURN>' for list of supported commands.
    Type "exit<RETURN>" to leave the HBase Shell
    Version 0.92.1, r1298924, Fri Mar  9 16:58:34 UTC 2012
    
    > move '3504a80cd4047f78834bcf58bf169e62', 'k4.ccntgrid.org,60020,1340682441023'
    0 row(s) in 0.5380 seconds
    

    u need the the region code to finish this. the region code is the last part of the region name(behind a dot(.)).
    region code