2012-06-26 7 views
5

la carga de mi clúster HBase no está equilibrada, así que quiero mover algunas regiones de la tabla de un servidor de regiones a otro, pero parece que se necesita un código de inicio de un servidor de regiones para hacer esto, ¿cómo puedo obtener este código de inicio?¿Cómo obtener el código de inicio de los servidores de regiones en un clúster HBase?

me di cuenta de que la página maestra de estado de alguien es como esto: other's master-status page

pero la mía es la siguiente: my master-status page

donde puedo conseguir el startcode?

realidad, quiero que pasemos una región de K3 regionserver a regionserver K2 y K3 en las regiones son: regions on k3

cómo puedo hacer esto? en detalle :)

Respuesta

7

bien, finalmente lo resolví.

/* 
* 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("+++++++++++++++++"); 
     } 
    } 
} 

En realidad, el código de inicio es la última parte del 'nombre del servidor'.

estos comandos terminarán en movimiento regiones de un regionserver a otra:

> [email protected] bin % pwd 
> /opt/kalium/hbase/bin 


> [email protected] 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 necesita el código de la región que terminar esto. el código de región es la última parte del nombre de la región (detrás de un punto (.)).
region code

2

Se puede utilizar el estado de los comandos en el shell hbase:

hbase(main):001:0> status 'simple' 

Se imprimirá la lista de servidores región con sus nombres de servidores, puertos y startcodes.

Cuestiones relacionadas