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:
but mine is like this:
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:
how can i do this? in detail :)
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:[email protected]">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(.)).
You can use the command status in the hbase shell:
hbase(main):001:0> status 'simple'
It will print the list of region servers with their server names, ports and startcodes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With