日期:2014-05-16 浏览次数:20398 次
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(); } }
Author:Pirate Leo