hbase 开启缓冲和不开启缓冲 比较

hbase 中的put 一个put相当于是一个rpc,如果循环的次数过多 则绝大部分时间都消耗在rpc的网路传输过程中 而不是用于传输数据的时间占比高

如果开启个缓冲 一次性提交批量数据 则会提高效率

得了 话就说那么多,直接上代码

package com.hit.test;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HTableInterface;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;

/**
 * Created by zh on 2017/10/25.
 */
public class TestPut {

    private byte[] f = Bytes.toBytes("mycf");
    private byte[] q = Bytes.toBytes("q1");
    private byte[] q2 = Bytes.toBytes("q2");


    public static void main(String[] args) throws Exception {
        TestPut t = new TestPut();
        HTableInterface mytable = HbaseUtils.getTable("sku:mytable");
        t.put1000(mytable);
        t.put100Cache(mytable);
    }

    public  void put1000( HTableInterface mytable)throws Exception{
        Long l = System.currentTimeMillis();

        for (int i =0;i<100000;i++){
            Put put = new Put(Bytes.toBytes("row1_"+i));
            put.add(f,q,Bytes.toBytes("row1_q1_value1_"+i));
            put.add(f,q2,Bytes.toBytes("row1_q2_value1_"+i));
            mytable.put(put);
        }

        System.out.println("put1000消耗时间为 "+ (System.currentTimeMillis() - l)+"ms");
    }

    public void put100Cache(HTableInterface mytable)throws Exception{
        Long l = System.currentTimeMillis();
        mytable.setAutoFlush(false);
        for (int i =0;i<100000;i++){
            Put put = new Put(Bytes.toBytes("row1_"+i));
            put.add(f,q,Bytes.toBytes("row1_q1_value1_"+i));
            put.add(f,q2,Bytes.toBytes("row1_q2_value1_"+i));
            mytable.put(put);
        }
        System.out.println("put100Cache消耗时间为 "+ (System.currentTimeMillis() - l)+"ms");

    }
}


附上测试的结果

put1000消耗时间为 164039ms
put100Cache消耗时间为 1895ms

差距简直大到惊人

可以手动去强制写缓冲 不过不推荐 推荐直接设置缓冲池的大小 让hbase客户端自动去提交数据

不过有一点得注意一下 我写的这个代码也没有注意到 最后得进行一个手动强制flash缓冲区域 不然会出现需要等待下次缓冲区域满了才会进行刷写hbase,出现数据丢失的情况




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值