欢迎投稿

今日深度:

Hbase性能优化,

Hbase性能优化,



1 不要设置太多的Column family

目前hbase不能很好的处理超过2-3个column family的表,因为某个column family在flush的时候,与它相邻的column family也会因为关联效应被触发flush,最终导致系统产生更多的I/O。

2   Auto Flush

通过调用HTable.setAutoFlush(false)方法可以将HTable写客户端的自动flush关闭,这样可以批量写入数据到HBase,而不是有一条put就执行一次更新,只有当put填满客户端写缓存时,才实际向HBase服务端发起写请求。默认情况下auto flush是开启的。

Write Buffer

 通过调用HTable.setWriteBufferSize(writeBufferSize)方法可以设置HTable客户端的写buffer大小,如果新设置的buffer小于当前写buffer中的数据时,buffer将会被flush到服务端。其中,writeBufferSize的单位是byte字节数,可以根据实际写入数据量的多少来设置该值。

多线程并发写

在客户端开启多个HTable写线程,每个写线程负责一个HTable对象的flush操作,这样结合定时flush和写buffer(writeBufferSize),可以既保证在数据量小的时候,数据可以在较短时间内被flush(如1秒内),同时又保证在数据量大的时候,写buffer一满就及时进行flush。下面给个具体的例子:
for (int i = 0; i < threadN; i++) {
    Thread th = new Thread() {
        public void run() {
            while (true) {
                try {
                    sleep(1000); //1 second
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                                synchronized (wTableLog[i]) {
                    try {
                        wTableLog[i].flushCommits();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
                }
    };
    th.setDaemon(true);
    th.start();
}

参考:http://blog.linezing.com/2012/03/hbase-performance-optimization

www.htsjk.Com true http://www.htsjk.com/hbase/40234.html NewsArticle Hbase性能优化, 1 不要设置太多的Column family 目前hbase不能很好的处理超过2-3个column family的表,因为某个column family在flush的时候,与它相邻的column family也会因为关联效应被触发flush,最终...
相关文章
    暂无相关文章
评论暂时关闭