HBase 1.1.2 优化插入 Region预分配
预分Region 与 不预分Region 的测试:
1 不预分Region:
23~29秒插入100W数据 并且蛋疼的是每次都写入一个 RegionServer 且 只在一个 Region 相当于人为制造的网络风暴。
2 预分Region(3节点分了3个Region)
写入 18~19秒 100W 数据。 55555 每秒。(本机网络请求已满。否则应该线性增长)
下面是代码;
(注释部分为不分 Region 的情况)
package com.rocky.util;import com.rocky.dao.HBaseFactory;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.*;import org.apache.hadoop.hbase.client.*;import org.apache.hadoop.hbase.util.Bytes;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.Random;import java.util.UUID;/*** Created by rocky_24 on 2016/2/25.*/public class putData {public static void main(String[] args) throws IOException {// /**// * 分16// */// byte[][] preforkRegions = new byte[10+6][];// int k=0;// System.out.println(preforkRegions.length);// for(char i='0';i<='9';i++){// preforkRegions[k++]=(""+i).getBytes();// }// for(char i='a';i<='f';i++){// preforkRegions[k++]=(""+i).getBytes();// }byte[][] preforkRegions = new byte[3][];preforkRegions [0] = ("5").getBytes();preforkRegions [1] = ("10").getBytes();preforkRegions [2] = ("z").getBytes();createTable("access_logs","f",preforkRegions);System.out.println(TimeUtils.getIntradayDateAndTime());String [] pages = {"/","/a.html","/b.html","/c.html"};Configuration con = HBaseFactory.getConf();HTable table = new HTable(con,"access_logs");// Table table = HBaseFactory.getHBaseConnection().getTable(TableName.valueOf("access_logs"));table.setWriteBufferSize(1024 * 1024 * 6);table.setAutoFlushTo(false);int totalRecords = 10000;Random rand = new Random();System.out.println("importing " + totalRecords + " records ....");List<Put> list = new ArrayList<Put>();for (int i=0; i < totalRecords * 100; i++) {String rowkey = UUID.randomUUID().toString();String randomPage = pages[rand.nextInt(pages.length)];Put put = new Put(rowkey.getBytes());put.addColumn(Bytes.toBytes("f"), null, Bytes.toBytes(randomPage));list.add(put);}System.out.println("put数据装载完毕:"+list.size());System.out.println(TimeUtils.getIntradayDateAndTime());table.put(list);table.flushCommits();table.close();System.out.println("done");System.out.println(TimeUtils.getIntradayDateAndTime());}/*** 创建表* @param tableName* @param columnFamily* @param spilts* @throws IOException*/public static void createTable(String tableName, String columnFamily, byte[][] spilts) throws IOException {Connection connection = HBaseFactory.getHBaseConnection();Admin admin = connection.getAdmin();if (admin.tableExists(TableName.valueOf(tableName))) {admin.disableTable(TableName.valueOf(tableName));admin.deleteTable(TableName.valueOf(tableName));}HTableDescriptor tableDesc = new HTableDescriptor(TableName.valueOf(tableName));tableDesc.addFamily(new HColumnDescriptor(columnFamily));if (spilts == null) {admin.createTable(tableDesc);} else {admin.createTable(tableDesc, spilts);}admin.close();}}
HBase 1.1.2 优化插入 Region预分配的更多相关文章
- 【转载】HBase 数据库检索性能优化策略
转自:http://www.ibm.com/developerworks/cn/java/j-lo-HBase/index.html 高性能 HBase 数据库 本文首先介绍了 HBase 数据库基本 ...
- HBase 数据库检索性能优化策略--转
https://www.ibm.com/developerworks/cn/java/j-lo-HBase/index.html HBase 数据表介绍 HBase 数据库是一个基于分布式的.面向列的 ...
- HBase 数据库检索性能优化策略
HBase 数据表介绍 HBase 数据库是一个基于分布式的.面向列的.主要用于非结构化数据存储用途的开源数据库.其设计思路来源于 Google 的非开源数据库"BigTable" ...
- hbase读的性能优化
任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题.HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少.总结 ...
- mysql如何优化插入记录速度
插入记录时,影响插入速度的主要是索引.唯一性校验.一次插入记录条数等.根据这些情况,可以分别进行优化,本节将介绍优化插入记录速度的几种方法. 一.对于MyISAM引擎表常见的优化方法如下: 1 ...
- hbase优化之region合并和压缩
HBASE操作:(一般先合并region然后再压缩) 一 .Region合并: merge_region 'regionname1','regionname2' ,'true' --true代表 ...
- HBase(八): 表结构设计优化
在 HBase(六): HBase体系结构剖析(上) 介绍过,Hbase创建表时,只需指定表名和至少一个列族,基于HBase表结构的设计优化主要是基于列族级别的属性配置,如下图: 目录: BLOOMF ...
- HBase 架构与工作原理5 - Region 的部分特性
本文系转载,如有侵权,请联系我:likui0913@gmail.com Region Region 是表格可用性和分布的基本元素,由列族(Column Family)构成的 Store 组成.对象的层 ...
- Java客户端访问HBase集群解决方案(优化)
测试环境:Idea+Windows10 准备工作: <1>.打开本地 C:\Windows\System32\drivers\etc(系统默认)下名为hosts的系统文件,如果提示当前用户 ...
随机推荐
- LR编写get请求
LR编写简单Get接口 接口必备信息:接口功能.URL.支持格式.http请求方式.请求参数.返回参数 请求地址 http://api.k780.com:88/?app=life.time 请求方式 ...
- Ncomputering 安装及参数设置
1.加域 2.添加用户:系统属性---远程
- 字符串格式化输出、while循环、运算符、编码
1.字符串格式化输出 %占位符: %s => 字符串 %d=>整数型 %%=>转义 普通的% %()不能多,不能少,一一对应 f"{}"大括号里的内容一般都放变量 ...
- 学习参考《父与子的编程之旅python【第二版】》高清中文版PDF+高清英文版PDF+源代码
对于初步接触编程语言的朋友,推荐看一看<父与子的编程之旅第2版>,对于完全编程零基础的很友好! 图文并茂,过多的文字堆垒很容易让人产生厌倦情绪,也更容易让人产生放弃的想法.使用了大量插图, ...
- c指针学习小结(参考别人总结的经验)
指针学习与总结一.1.int *p :p与*先结合,说明p是一个指针,然后与int结合说明指向的是一个int型的.2.int p[3] :p与[]结合说明p是一个数组,然后与int结合,说明数组里的元 ...
- thinkphp 5.0整合phpsocketio完整攻略,绕坑
使用环境: thinkphp5.0 项目需求 前端下单,后台接受,并立即做出提示.例如:美团外卖,客户端下单成功后,商家端就会立即有接单语音提示. 开发环境 thinkphp5.0 phpsocket ...
- 紫书 习题 11-2 UVa 1001 (Floyd)
这道题只是在边上做一些文章. 这道题起点终点可以看成半径为0的洞, 我是直接加入了洞的数组. 边就是两点间的距离减去半径, 如果结果小于0的话, 距离就为0, 距离不能为负 然后我看到n只有100, ...
- 紫书 习题 8-15 UVa 1617 (贪心)
先排序, 然后每个线段先放右端点, 然后往下放, 如果不能放就整体往左移动, 当不能往左移动的时候就ans++ 开始下一个整块.判断能不能向左移动要用一个变量储存每个已经放了的区间中线段与左端点距离的 ...
- JAVA:从public static void main(String args[])開始
我们都知道当你要执行一个JAVA文件的时候必需要有一个main函数. 这是为什么呢? 跟C语言的道理一样,当你执行一个文件的时候.你必需要有一个入口函数或者入口地址,在C里面是main函数.相同的在J ...
- 捕捉到来自宇宙深空的神奇X-射线信号
请看下图: 这是专门用于捕捉X-射线信号的航天望远镜,约有5吨重,执行轨道距离地面大约有5万多公里.6月24日,美国宇航局NASA宣布,这台航天望远镜从银河系深处捕捉到一种波长非常特殊的神奇X-射线信 ...
