`
ganliang13
  • 浏览: 252935 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

put批量提交hbase性能改善

阅读更多
在使用HBase Put API的时候,有几个会影响性能的因素。

1.Put List Size
HBase的Put支持单条插入,也支持批量插入。

2. AutoFlush
AutoFlush指的是在每次调用HBase的Put操作,是否提交到HBase Server。 默认是true,每次会提交。如果此时是单条插入,就会有更多的IO,从而降低性能

3.Write Buffer Size
Write Buffer Size在AutoFlush为false的时候起作用,默认是2MB,也就是当插入数据超过2MB,就会自动提交到Server

4.WAL
WAL是Write Ahead Log的缩写,指的是HBase在插入操作前是否写Log。默认是打开,关掉会提高性能,但是如果系统出现故障(负责插入的Region Server挂掉),数据可能会丢失。

下面是一个简单的测试:

table: 4个family 每行插入的数据4KB,每次提交1000行

WAL=false,autoFlush=false,buffer=25165824 insert complete,costs:0.4453ms/row

WAL=false,autoFlush=true,buffer=0 insert complete,costs:0.6ms/row

WAL=true,autoFlush=true,buffer=0 insert complete,costs:1.8797ms/row

可以看出在WAL关闭,并且设置比较合适的buffer size,可以将性能提高到4到5倍.

测试代码:

public class TestInsert {
    static HBaseConfiguration hbaseConfig;

    public static void main(String[] args) throws Exception {
        Configuration HBASE_CONFIG = new Configuration();
        HBASE_CONFIG.set("hbase.zookeeper.quorum", "gms5,gms6");
        HBASE_CONFIG.set("hbase.zookeeper.property.clientPort", "2181");
        hbaseConfig = new HBaseConfiguration(HBASE_CONFIG);
        insert(false,false,1024*1024*24);
        insert(false,true,0);
        insert(true,true,0);
    }

    private static void insert(boolean wal,boolean autoFlush,long writeBuffer)
            throws IOException {
        String tableName="etltest";
        HBaseAdmin hAdmin = new HBaseAdmin(hbaseConfig);
        if (hAdmin.tableExists(tableName)) {
            hAdmin.disableTable(tableName);
            hAdmin.deleteTable(tableName);
            HTableDescriptor t = new HTableDescriptor(tableName);
            t.addFamily(new HColumnDescriptor("f1"));
            t.addFamily(new HColumnDescriptor("f2"));
            t.addFamily(new HColumnDescriptor("f3"));
            t.addFamily(new HColumnDescriptor("f4"));
            hAdmin.createTable(t);
            System.out.println("table created");
        }
        HTable table = new HTable(hbaseConfig, tableName);
        table.setAutoFlush(autoFlush);
        if(writeBuffer!=0){
            table.setWriteBufferSize(writeBuffer);
        }
        List<Put> lp = new ArrayList<Put>();
        long all = System.currentTimeMillis();
        int count = 10000;
        byte[] buffer = new byte[1024];
        Random r = new Random();
        for (int i = 1; i <= count; ++i) {
            Put p = new Put(String.format("row d",i).getBytes());
            r.nextBytes(buffer);
            p.add("f1".getBytes(), null, buffer);
            p.add("f2".getBytes(), null, buffer);
            p.add("f3".getBytes(), null, buffer);
            p.add("f4".getBytes(), null, buffer);
            p.setWriteToWAL(wal);
            lp.add(p);
            if(i00==0){
                table.put(lp);
                lp.clear();
            }
        }
        System.out.println("WAL="+wal+",autoFlush="+autoFlush+",buffer="+writeBuffer);
        System.out.println("insert complete"+",costs:"+(System.currentTimeMillis()-all)*1.0/count+"ms");
    }
}

 

 

分享到:
评论

相关推荐

    HBase性能深度分析

    ### HBase性能深度分析 HBase,作为BigTable的一个开源实现,因其卓越的分布式数据库特性在大数据处理领域占据了重要地位。然而,随着HBase在各行业的广泛应用,用户对其性能表现的关注日益增强,尤其是实时数据...

    Hbase调用JavaAPI实现批量导入操作

    批量操作将所有待写入的数据先放入内存,然后一次性提交到HBase,减少了网络传输和磁盘I/O。 4. **预处理数据**: 在批量导入前,通常需要对输入数据进行预处理,如解析文件,生成`Put`对象,设置行键和列族。行键...

    Hbase笔记 —— 利用JavaAPI的方式操作Hbase数据库(往hbase的表中批量插入数据).pdf

    在本文档中,我们将深入探讨如何使用Java API与HBase数据库进行交互,特别是关于如何创建表、修改表结构以及批量插入数据。HBase是Apache的一个分布式、可扩展的大数据存储系统,它基于谷歌的Bigtable设计,适用于...

    HBase性能优化方法总结

    本文将深入探讨HBase性能优化的各种策略,旨在帮助你提升数据操作的效率。 一、硬件优化 1. **磁盘选择**:HBase对I/O性能要求较高,因此推荐使用SSD硬盘,以减少读写延迟。 2. **内存配置**:合理分配HBase的堆...

    某大数据公司内部Hbase性能测试详细设计文档及用例

    在HBase中,客户端向集群中的RegionServer提交数据时(Put/Delete),可以通过设置WAL Flag来控制写入的行为。如果WAL Flag设置为true,那么写入操作将被记录到WAL中,以便在 RegionServer崩溃时可以恢复数据。如果...

    HBase实现批量存取

    HBase是一种分布式、高性能、基于列族的NoSQL数据库,由Apache基金会开发并维护,它在大规模数据存储和实时查询方面表现出色。本项目实现了在Eclipse环境下对HBase的批量存取操作,这对于理解HBase的工作原理以及...

    hbase各种例子新增修改删除批量导入

    hbase各种例子新增修改删除批量导入: public static void main(String[] args) throws IOException { Configuration conf = HBaseConfiguration.create(); HBaseHelper helper = HBaseHelper.getHelper(conf); ...

    hbase-shell批量命令执行脚本的方法

    批量执行hbase shell 命令 #!/bin/bash source /etc/profile exec $HBASE_HOME/bin/hbase shell &lt;&lt;EOF truncate 'tracker_total_apk_fact_zyt' major_compact('t_abc') disable 't_abc' drop 't_abc' create...

    HBase的性能优化

    "HBase性能优化" HBase是一种高性能的NoSQL数据库,广泛应用于大数据存储和处理领域。然而,HBase的性能优化是非常重要的,特别是在大规模数据集群环境中。以下是HBase性能优化的相关知识点: 启用LZO压缩 HBase...

    HBase写性能优化策略

    业务场景如果允许,可以开启异步批量提交,即设置setAutoFlush(false),通过在客户端缓存一定量的数据后批量提交给RegionServer。 第三点,关注Region的数量是否合理。Region是HBase中进行数据分布和负载均衡的单位...

    hbase性能测试.docx

    在对HBase进行性能测试时,我们关注的关键指标包括数据读写速度、系统资源消耗以及MapReduce框架的运行效率。以下是对文档中提到的几个重要性能指标的详细解读: 1. **顺序写入(Sequential Write)**: - **FILE:...

    Hbase调用JavaAPI实现批量导入操作.docx

    批量导入操作需要使用 HTable 类,通过 put() 方法将数据写入 Hbase 表中。代码如下: ```java public static void put(String tableName, String row, String columnFamily, String column, String data) throws ...

    HBase性能优化指南

    - **批量操作**: 使用批量get和put操作来减少对服务器的往返次数。 - **缓存使用**: 在客户端适当使用缓存来减少访问HBase集群的次数。 #### 正确性保证 - **HDFS校验和验证**: 为保证数据的正确性,可以开启`...

    hbase性能优化

    真的是实战经验才能得出来的结果,如果你想深入了解hbase的性能,这个真的对你会有很大的帮助

    HBASE性能调优方法1

    本文主要从几个关键方面介绍了HBase的性能优化策略,包括自动刷新、写缓冲区、WAL日志、数据压缩、批量操作、多线程并发以及缓存策略等。 1. 自动刷新(Auto Flash): 通过调用`HTable.setAutoFlushTo(false)`,可以...

    Hbase性能测试详细设计文档及用例q

    默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据...一种可以加快批量写入速度的方法是通过预先创建一些空的regions,这样当数据写入HBase时,会按照region分区情况,在集群内做数据的负载均衡。

    hbase性能调优手册

    本文主要介绍HBase性能调优的几种常用方法,重点在于理解性能优化背后的核心概念及其应用。 ### Rowkey设计 Rowkey是HBase中每行数据的唯一标识,它的设计对于性能有着至关重要的影响。一个良好的Rowkey设计应当...

    Hbase性能优化百科全书(csdn)————程序.pdf

    例如,使用Put批量写入数据比单条写入更高效;对于经常性的Scan操作,可以设置适当的Filter,减少不必要的数据扫描;同时,理解并调整HBase的配置参数,如HBase的并发控制参数,可以进一步提升读写性能。 最后,...

    Hadoop2.7.1+Hbase1.2.1集群环境搭建(7)hbase 性能优化

    本篇将详细阐述如何在Hadoop 2.7.1环境下搭建HBase 1.2.1集群,并进行性能优化,以提升系统效率。 首先,我们需要了解Hadoop和HBase的基本概念。Hadoop是基于分布式文件系统HDFS(Hadoop Distributed File System)...

    hadoop hbase性能报告(英文)

    ### Hadoop HBase性能报告分析 #### 引言与研究目标 本项目旨在评估Hadoop与HBase在实际集群环境中的性能表现。具体目标包括: 1. 在节点组成的集群上安装并配置Hadoop与HBase。 2. 研究Hadoop与HBase API,并...

Global site tag (gtag.js) - Google Analytics