在使用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,作为BigTable的一个开源实现,因其卓越的分布式数据库特性在大数据处理领域占据了重要地位。然而,随着HBase在各行业的广泛应用,用户对其性能表现的关注日益增强,尤其是实时数据...
批量操作将所有待写入的数据先放入内存,然后一次性提交到HBase,减少了网络传输和磁盘I/O。 4. **预处理数据**: 在批量导入前,通常需要对输入数据进行预处理,如解析文件,生成`Put`对象,设置行键和列族。行键...
在本文档中,我们将深入探讨如何使用Java API与HBase数据库进行交互,特别是关于如何创建表、修改表结构以及批量插入数据。HBase是Apache的一个分布式、可扩展的大数据存储系统,它基于谷歌的Bigtable设计,适用于...
本文将深入探讨HBase性能优化的各种策略,旨在帮助你提升数据操作的效率。 一、硬件优化 1. **磁盘选择**:HBase对I/O性能要求较高,因此推荐使用SSD硬盘,以减少读写延迟。 2. **内存配置**:合理分配HBase的堆...
在HBase中,客户端向集群中的RegionServer提交数据时(Put/Delete),可以通过设置WAL Flag来控制写入的行为。如果WAL Flag设置为true,那么写入操作将被记录到WAL中,以便在 RegionServer崩溃时可以恢复数据。如果...
HBase是一种分布式、高性能、基于列族的NoSQL数据库,由Apache基金会开发并维护,它在大规模数据存储和实时查询方面表现出色。本项目实现了在Eclipse环境下对HBase的批量存取操作,这对于理解HBase的工作原理以及...
hbase各种例子新增修改删除批量导入: public static void main(String[] args) throws IOException { Configuration conf = HBaseConfiguration.create(); HBaseHelper helper = HBaseHelper.getHelper(conf); ...
批量执行hbase shell 命令 #!/bin/bash source /etc/profile exec $HBASE_HOME/bin/hbase shell <<EOF truncate 'tracker_total_apk_fact_zyt' major_compact('t_abc') disable 't_abc' drop 't_abc' create...
"HBase性能优化" HBase是一种高性能的NoSQL数据库,广泛应用于大数据存储和处理领域。然而,HBase的性能优化是非常重要的,特别是在大规模数据集群环境中。以下是HBase性能优化的相关知识点: 启用LZO压缩 HBase...
业务场景如果允许,可以开启异步批量提交,即设置setAutoFlush(false),通过在客户端缓存一定量的数据后批量提交给RegionServer。 第三点,关注Region的数量是否合理。Region是HBase中进行数据分布和负载均衡的单位...
在对HBase进行性能测试时,我们关注的关键指标包括数据读写速度、系统资源消耗以及MapReduce框架的运行效率。以下是对文档中提到的几个重要性能指标的详细解读: 1. **顺序写入(Sequential Write)**: - **FILE:...
批量导入操作需要使用 HTable 类,通过 put() 方法将数据写入 Hbase 表中。代码如下: ```java public static void put(String tableName, String row, String columnFamily, String column, String data) throws ...
- **批量操作**: 使用批量get和put操作来减少对服务器的往返次数。 - **缓存使用**: 在客户端适当使用缓存来减少访问HBase集群的次数。 #### 正确性保证 - **HDFS校验和验证**: 为保证数据的正确性,可以开启`...
真的是实战经验才能得出来的结果,如果你想深入了解hbase的性能,这个真的对你会有很大的帮助
本文主要从几个关键方面介绍了HBase的性能优化策略,包括自动刷新、写缓冲区、WAL日志、数据压缩、批量操作、多线程并发以及缓存策略等。 1. 自动刷新(Auto Flash): 通过调用`HTable.setAutoFlushTo(false)`,可以...
默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据...一种可以加快批量写入速度的方法是通过预先创建一些空的regions,这样当数据写入HBase时,会按照region分区情况,在集群内做数据的负载均衡。
本文主要介绍HBase性能调优的几种常用方法,重点在于理解性能优化背后的核心概念及其应用。 ### Rowkey设计 Rowkey是HBase中每行数据的唯一标识,它的设计对于性能有着至关重要的影响。一个良好的Rowkey设计应当...
例如,使用Put批量写入数据比单条写入更高效;对于经常性的Scan操作,可以设置适当的Filter,减少不必要的数据扫描;同时,理解并调整HBase的配置参数,如HBase的并发控制参数,可以进一步提升读写性能。 最后,...
本篇将详细阐述如何在Hadoop 2.7.1环境下搭建HBase 1.2.1集群,并进行性能优化,以提升系统效率。 首先,我们需要了解Hadoop和HBase的基本概念。Hadoop是基于分布式文件系统HDFS(Hadoop Distributed File System)...
### Hadoop HBase性能报告分析 #### 引言与研究目标 本项目旨在评估Hadoop与HBase在实际集群环境中的性能表现。具体目标包括: 1. 在节点组成的集群上安装并配置Hadoop与HBase。 2. 研究Hadoop与HBase API,并...