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的系统文件,如果提示当前用户 ...
随机推荐
- hiho169周 - 表达式求值
题目链接 计算表达式100*(2+12)-(20/3)*2 ---------------------------------------------------------------------- ...
- 响应式流API的构建基础
下面三个重要的概念是响应式流API的构建基础: 发布者是事件的发送方,可以向它订阅. 订阅者是事件订阅方. 订阅将发布者和订阅者联系起来,使订阅者可以向发布者发送信号. http://www.info ...
- SpringCloud学习笔记(10)----Spring Cloud Netflix之声明式 REST客户端 -Feign的高级特性
1. Feign的默认配置 Feign 的默认配置 Spring Cloud Netflix 提供的默认实现类:FeignClientsConfiguration 解码器:Decoder feignD ...
- Matlab---从入门到精通 Chapter 4 编程基础
---恢复内容开始--- 4-1 M文件编辑器 在命令窗口输入edit命令,可以打开M文件编辑器,创建新的M文件 在命令行中输入edit filename,那么可以打开在当前目录环境下的M文件 4-2 ...
- JSON string 在内存中转流 MemoryStream 代码,以及需要注意的问题utf-8问题
MemoryStream ms = new MemoryStream(System.Text.Encoding.UTF8.GetBytes("字符串"); string str = ...
- c 和 指针读书笔记(1)
1.字符串常量:出现在表达式中,其值是一个指针 "abc" + 1; //b 2.回掉函数:就是把函数的作为参数传入父函数,函数本身就是一个地址,传址肯定没问题.至于父函数是想用函 ...
- 架构思想之CAP原理
由于自己负责后端的设计已经有一段时间,对设计的一些思想和理论有一些理解,但最近被问到什么是CAP时,却一脸懵逼,下来后专门针对CAP架构思想进行了一些专题学习,在这里也将这个概念引入给大家,大家可以有 ...
- [MST] Loading Data from the Server using lifecycle hook
Let's stop hardcoding our initial state and fetch it from the server instead. In this lesson you wil ...
- leetCode解题报告5道题(七)
题目一:Interleaving String Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2 ...
- MySql-Error: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
MySql-Error: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 标签( ...