HBase集群RegionServer节点扩容性能验证

RegionServer节点扩展后,需要将一部分原有Region迁移到新的RegionServer中,使各RegionServer负载均衡。

为了验证多了一个节点后的HBase的写性能提升,需要使每次put时List中的RowKey平均分配到现有的所有Region中,以达到使所有RegionServer并发处理的目的。

下面的代码是这种均匀RowKey构建的元代码:

import java.util.ArrayList; 
import java.util.List; 
 
 
public class externTest { 
 
    public static long TOTAL_NUMS = 145; 
    public static int REGION_NUMS = 24; 
    public static long EACH_PUT_NUMS = 48; 
 
    public static void buildString() { 
        int addition = 0; 
        String str = null; 
        List<String> list = new ArrayList<String>(); 
        long curNum = 0; 
         
        long putNums = TOTAL_NUMS/EACH_PUT_NUMS;    //通常等于总put数-1; 
        long loopsInOnePut = EACH_PUT_NUMS/REGION_NUMS; //一次put所需的内层循环数,也即是curNum自增数 
         
        // 处理循环内的 
        for (long k = 0; k < putNums; k++) { 
            for (long i = 0; i < loopsInOnePut; i++) { 
                for (int j = 0; j < REGION_NUMS; j++) { 
                    //A-Z使用同一个数值 
                    addition = j % REGION_NUMS; 
                    str = num2ABC(addition); 
                    //构建本条记录字符串 
                    System.out.println(str + curNum); 
                    list.add(str); 
                } 
                curNum++;  //一次循环后当前尾数+1 
            } 
            // TODO: 执行一次put 
            System.out.println("put"); 
            list.clear(); 
        } 
         
        // 处理循环外的,肯定小于EACH_PUT_NUMS,最后一次put操作 
        long lastNums = TOTAL_NUMS % EACH_PUT_NUMS; //还剩多少记录要put 
        long lastloops = lastNums / REGION_NUMS;    //curNum还要自增多少 
        long numPlus = lastNums % REGION_NUMS;      //最后额外补充多少条记录 
        for (long i = 0; i < lastloops; i++) { 
            for (int j = 0; j < REGION_NUMS; j++) { 
                //A-Z使用同一个数值 
                addition = j % REGION_NUMS; 
                str = num2ABC(addition); 
                //构建本条记录字符串 
                System.out.println(str + curNum); 
                list.add(str); 
            } 
            curNum++;  //一次循环后当前尾数+1 
        } 
        // 将循环外 
        for (int j = 0; j < numPlus; j++) { 
            //A-Z使用同一个数值 
            addition = j % REGION_NUMS; 
            str = num2ABC(addition); 
            //构建本条记录字符串 
            System.out.println(str + curNum); 
            list.add(str); 
        } 
        // TODO: 执行一次put 
        System.out.println("put"); 
        list.clear(); 
         
        return; 
    } 
     
    public static String num2ABC(int num) { 
        String str = null; 
        switch (num) { 
            case 0: 
                str = new String("A"); 
                break; 
            case 1: 
                str = new String("B"); 
                break; 
            case 2: 
                str = new String("C"); 
                break; 
            case 3: 
                str = new String("D"); 
                break; 
            case 4: 
                str = new String("E"); 
                break; 
            case 5: 
                str = new String("F"); 
                break; 
            case 6: 
                str = new String("G"); 
                break; 
            case 7: 
                str = new String("H"); 
                break; 
            case 8: 
                str = new String("I"); 
                break; 
            case 9: 
                str = new String("J"); 
                break; 
            case 10: 
                str = new String("K"); 
                break; 
            case 11: 
                str = new String("L"); 
                break; 
            case 12: 
                str = new String("M"); 
                break; 
            case 13: 
                str = new String("N"); 
                break; 
            case 14: 
                str = new String("O"); 
                break; 
            case 15: 
                str = new String("P"); 
                break; 
            case 16: 
                str = new String("Q"); 
                break; 
            case 17: 
                str = new String("R"); 
                break; 
            case 18: 
                str = new String("S"); 
                break; 
            case 19: 
                str = new String("T"); 
                break; 
            case 20: 
                str = new String("U"); 
                break; 
            case 21: 
                str = new String("V"); 
                break; 
            case 22: 
                str = new String("W"); 
                break; 
            case 23: 
                str = new String("X"); 
                break; 
            default: 
                str = new String("Z"); 
                break; 
        } 
        return str; 
    } 
     
    /**
    * @param args
    */ 
    public static void main(String[] args) { 
        System.out.println("Test my Java!"); 
         
        buildString(); 
    } 

相关推荐