java hbase 写入性能_hbase java写入性能提高

批量数据通过java写入hbase,下面有一个小小的技巧,大大提高性能

例子:写入10000行数据

注意代码中有注释//############################ 的行,下面称之为 ”#代码“

对比加入 ”#代码“ 前后的性能

没有 ”#代码“,耗时31541ms

含有 ”#代码“,耗时2455ms

效果非常明显。

贴上代码:

import java.io.IOException;

import java.util.UUID;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;

import org.apache.hadoop.hbase.HColumnDescriptor;

import org.apache.hadoop.hbase.HTableDescriptor;

import org.apache.hadoop.hbase.client.HBaseAdmin;

import org.apache.hadoop.hbase.client.HTable;

import org.apache.hadoop.hbase.client.Put;

public class PerformanceComparison {

private Configuration config = null;

final private String tableName = "table_test";

public PerformanceComparison(){

config = HBaseConfiguration.create();

}

public void createTable() throws IOException{

HBaseAdmin admin = new HBaseAdmin(config);

if(admin.tableExists(tableName)){

System.out.println("table [" + tableName + "] is

exist.");

admin.disableTable(tableName);

admin.deleteTable(tableName);

System.out.println("delete table ["+tableName+"] ok.");

}

HTableDescriptor tableDesc = new

HTableDescriptor(tableName);

tableDesc.addFamily(new

HColumnDescriptor("fam1"));//family

tableDesc.addFamily(new

HColumnDescriptor("fam2"));//family

admin.createTable(tableDesc);

System.out.println("create table [" + tableName + "]

ok.");

}

private byte[] toByte(String input){

return (input != null) ? input.getBytes() : null;

}

public void WriteIntoTable() throws IOException{

HTable htable = new HTable(config, tableName);

htable.setAutoFlush(false);//############################

System.out.println("begin to write data into table [" +

tableName + "].");

int i = 0;

while(i < 10000){

i++;

if(i00 == 0)//############################

htable.flushCommits();//############################

String itemId = UUID.randomUUID().toString();

Put put = new Put(itemId.getBytes());

put.add(toByte("fam1"), toByte("qualifier0"),

toByte(UUID.randomUUID().toString()));

put.add(toByte("fam1"), toByte("qualifier1"),

toByte(UUID.randomUUID().toString()));

put.add(toByte("fam1"), toByte("qualifier2"),

toByte(UUID.randomUUID().toString()));

put.add(toByte("fam1"), toByte("qualifier3"),

toByte(UUID.randomUUID().toString()));

put.add(toByte("fam1"), toByte("qualifier4"),

toByte(UUID.randomUUID().toString()));

put.add(toByte("fam1"), toByte("qualifier5"),

toByte(UUID.randomUUID().toString()));

put.add(toByte("fam2"), toByte("qualifier6"),

toByte(UUID.randomUUID().toString()));

put.add(toByte("fam2"), toByte("qualifier7"),

toByte(UUID.randomUUID().toString()));

put.add(toByte("fam2"), toByte("qualifier8"),

toByte(UUID.randomUUID().toString()));

put.add(toByte("fam2"), toByte("qualifier9"),

toByte(UUID.randomUUID().toString()));

htable.put(put);

}

htable.flushCommits();//############################

}

public static void main(String[] args) {

PerformanceComparison test = new

PerformanceComparison();

try {

test.createTable();

long start = System.currentTimeMillis();

test.WriteIntoTable();

long end = System.currentTimeMillis();

System.out.println("spend:" + (end - start));

} catch (IOException e) {

e.printStackTrace();

}

}

}

生活永不停步......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值