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
myBlog:http://blog.csdn.net/pirateleo/
myEmail:codeevoship@gmail.com
转载请注明出处,谢谢。
分享到:
相关推荐
hbase的Rowkey设计⽅案 1.1 hbase的概述 的概述 HBase由于其存储和读写的⾼性能,在OLAP即时分析中越来越发挥重要的作⽤。作为Nosql数据库的⼀员,HBase查询只能通过其 Rowkey来查询(Rowkey⽤来表⽰唯⼀⼀⾏记录),...
HBase集群搭建
关于HBase集群监控在java代码中的实现操作,供大家参考
搭建hbase集群的详细操作;搭建hbase集群的详细操作;
hbase需要搭建集群,这里详细的介绍了集群的安装方式以及配置文件的一些修改
zookeeper+hbase集群搭建+搭建过程报错解决+原理,通俗易懂,详细配置注解!!!
2. JDK安装部署 3. Zookeeper安装部署 4. Nginx安装部署 5. Hadoop安装部署 6. HBase安装部署 7. MongoDB数据库安装部署; 8. ElasticSearch集群安装部署; 9. 应用服务器的安装及部署
一步一步教你在WINDOW CYGWIN下完成HBASE集群环境搭建。
hbase集群部署文档,附带简单基本命令、!!!!!!!
HBase2集群配置.pdf HBase2集群配置.pdf HBase2集群配置.pdf HBase2集群配置.pdf
HBase集群环境搭建
新手Hadoop_hbase集群搭建,3台服务器节点Centos7,Hadoop2.7.4,HBase1.3.1,jdk8,zookpeer3.4.10 安装包也将上传,亲手搭建编写文档
HBase集群环境安装
hadoop-2.52-hbase-0.14-hadoop2 ha高可用安装,hbase动态添加删除节点,hbase集群正常状态及启动,hbase 问题汇总
文档是我自己一步步完成实验写成的,给初学大数据的朋友共享一下希望能有所帮助
HBASE调优 HBASE技术框架与存储模型 v HBASE调优 v 硬件 v 系统参数 v java v 表的设计 v 客户端 v 服务器端
hadoop+hbase集群搭建 详细手册
docker版hbase集群构建,从docker安装开始,再到docker中下载并运行hadoop镜像,之后下载并配置hbase。最后对整个流程做总结,遇到的问题,以及一些docker基础知识和hbase教程。
数据仓库hadoop+zookeeper+hbase集群安装方法记录,自己搭建纯手写的记录。相关软件请自行下载
记录我的学习之旅,每份文档倾心倾力,带我成我大牛,回头观望满脸笑意,望大家多多给予意见,有问题或错误,请联系 我将及时改正;借鉴文章标明出处,谢谢