一. put 优化
Hbase的API配备了一个客户端的写缓冲区(write buffer),缓冲区负责收集put操作,然后调用PRC操作一次性将put送往服务器。默认情况下写缓冲区是禁用的,可以调用table.setAutoFlush(false)来激活缓冲区:
@Test public void testWriteBuffer() throws Exception{ HTable table = (HTable)conn.getTable(TableName.valueOf("t1")); //table.setAutoFlushTo(false); long start = System.currentTimeMillis(); for(int i=10001; i<20000; i++){ Put put = new Put(Bytes.toBytes("row"+i)); put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("name"), Bytes.toBytes("terry"+i)); put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("job"), Bytes.toBytes("manager"+i)); table.put(put); } //table.flushCommits(); table.close(); System.out.println(System.currentTimeMillis()-start); }
测试结果:
1 使用table.setAutoFlushTo(false);: 结果864 ,注意:即使不使用 table.flushCommits(); 在执行table.close();时也会提交缓存内容。
2 不使用table.setAutoFlushTo(false);: 结果25443
Write Buffer默认大小是2MB,如果需要一次存储较大的数据,可以考虑增大这个数值
方法1: 临时修改WriteBufferSize
table.setWriteBufferSize(writeBufferSize);
方法2: 一次性修改hbase-site.xml
<property> <name>hbase.client.write.buffer</name> <value>2097152</value> </property>
另外使用List也可以优化put,下面代码测试结果614:
@Test public void testPubList() throws Exception{ HTable table = (HTable)conn.getTable(TableName.valueOf("t1")); List<Put> publist = new ArrayList<Put>(); long start = System.currentTimeMillis(); for(int i=30001; i<40000; i++){ Put put = new Put(Bytes.toBytes("row"+i)); put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("name"), Bytes.toBytes("terry"+i)); put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("job"), Bytes.toBytes("manager"+i)); publist.add(put); } table.put(publist); table.close(); System.out.println(System.currentTimeMillis()-start); }
二 Scan优化
设置扫描缓冲器大小可以优化scanner性能,
@Test public void testScanCache() throws Exception{ HTable table = (HTable)conn.getTable(TableName.valueOf("t1")); Scan scan = new Scan(Bytes.toBytes("row0"), Bytes.toBytes("row999")); scan.setCaching(100); ResultScanner rs= table.getScanner(scan); Iterator<Result> it = rs.iterator(); long start = System.currentTimeMillis(); while(it.hasNext()){ Result r = it.next(); String name = Bytes.toString(r.getValue(Bytes.toBytes("cf"), Bytes.toBytes("name"))); String job = Bytes.toString(r.getValue(Bytes.toBytes("cf"), Bytes.toBytes("job"))); System.out.println(String.format("name=%s, job=%s", name, job) ); } table.close(); System.out.println(System.currentTimeMillis() - start); }
scan.setCaching(int value); value 代表一次RPC获取的行数。默认值取hbase-site.xml中的hbase.client.scanner.caching,为2147483647。 所以上例中使用了scan.setCaching(100);性能反而降低。
scanner.caching值过高也会带来一些坏处,比如RPC超时或者返回给客户端的数据超过了其堆的大小。
相关推荐
HBase API是开发者与HBase进行交互的主要接口,通过这个API可以实现对HBase表的创建、删除、增删改查等操作。 1. **HBase架构** - **Region Server**: HBase的数据存储在Region Server上,每个Region Server负责一...
本压缩包"javaApi_sparkhiveAPI_hbaseAPI.zip"包含了2019年8月至10月期间针对这些技术的Java版API实现,以及与Spark相关的Hive和HBase API。以下是关于这些技术的详细知识: 1. **Java API for Hive**: - **Hive*...
总之,Spring Data Hadoop的HbaseTemplate为Java开发者提供了一种简洁且强大的方式来操作HBase,通过其丰富的API可以轻松实现各种HBase操作。在实际项目中,结合Spring的依赖注入和配置管理,能够有效地提升代码的可...
这篇博客“Hbase调用Java API实现批量导入操作”聚焦于如何利用Java编程语言高效地向HBase中批量导入数据。在这个过程中,我们将探讨以下几个关键知识点: 1. **HBase架构**: HBase是基于列族的存储模型,数据被...
在本文中,我们将深入探讨如何使用Scala API操作HBase数据库。HBase是一个分布式、面向列的NoSQL数据库,它构建于Hadoop之上,提供实时访问大量数据的能力。Scala是一种强大的函数式编程语言,与Java虚拟机(JVM)...
HBase中文API为开发者提供了在中文环境中操作HBase的便利。 1. **入门** - **介绍**: HBase为大数据处理提供了实时读写能力,特别适合于存储海量稀疏数据。 - **快速开始**: 开发者通常需要了解如何创建表、插入...
"Hbase 0.9 API"指的是HBase在0.94.5版本中的客户端API,这个版本是HBase发展历史上的一个重要里程碑,为开发者提供了丰富的功能来操作HBase数据库。 首先,HBase的API主要分为两种:Java API和Shell命令。Java API...
**Java API** 是Java编程语言提供的应用程序接口,允许开发者使用Java来访问和操作Hadoop和HBase的功能。对于Hadoop,Java API主要包括`org.apache.hadoop.mapreduce`包下的类,如Job、Mapper、Reducer等,用于实现...
- **行键操作**:行键是数据的唯一标识,HBase API 提供了插入、获取、更新和删除行键的方法。 - **批处理**:`Put` 和 `Get` 操作可以批量执行,提高效率,适合大数据量处理。 - **扫描器(Scanner)**:用于按...
在Java中操作HBase,尤其是基于0.96版本的...以上就是使用Java API操作HBase的基本步骤。理解这些概念和方法对于有效管理和处理HBase中的数据至关重要。实际应用中,还需要考虑性能优化、并发控制以及错误处理等细节。
HBase的读写操作最终都会映射到HDFS的读写操作上,因此优化HDFS的读写性能对于提升HBase整体性能也是至关重要。这可以通过调整HDFS的数据块大小、增加副本数或者改善HDFS的数据分布来实现。 综上所述,HBase的读...
在HBase这个分布式列式数据库中,Java API是开发者常用的一种接口来操作HBase,包括创建表、插入数据、查询数据以及实现分页等操作。本文将深入探讨如何使用HBase Java API进行数据访问和分页查询。 首先,我们要...
这个Java API访问HBase的Maven项目可能还包含了对HBase其他特性的演示,如扫描(Scan)、过滤器(Filter)、批量操作(Bulk Load)等。通过`Scan`可以实现数据的批量读取,`Filter`可以定制化查询条件,`Bulk Load`...
HBase还支持批量操作,例如使用`Mutation`类的Java API,可以一次性提交多个`put`和`delete`操作,提高写入效率。此外,HBase提供了丰富的管理功能,如创建、修改和删除表,以及表分区(Region Splitting)和负载...
在实际应用中,还需要根据具体需求进一步配置Hbase,如设置Zookeeper地址、优化性能参数等。同时,理解Hbase的核心概念,如Region、RegionServer、WAL和HFile,对于高效使用Hbase至关重要。在实践中不断学习和探索,...
在Java环境中,HBase提供了丰富的Java API供开发者进行数据操作,包括创建表、删除表、更新表以及查询表等基本功能。下面我们将深入探讨HBase的Java API及其在实际应用中的使用。 1. **HBase连接** 在Java中使用...
HBase是一款分布式、高性能、基于列族的NoSQL数据库,主要设计用于...以上就是针对“hbase的java客户端api操作示例代码”的主要知识点。通过这些示例,开发者可以更好地理解和实践如何在Java环境中与HBase进行交互。
在这个“hbase api demo”中,我们将深入探讨如何使用HBase的API进行基本的数据操作,包括创建表、插入数据以及通过关键字检索和特定查询条件获取数据。 首先,让我们了解HBase的基本概念。在HBase中,数据被组织成...
在Java中操作HBase,我们需要使用HBase的Java客户端API。首先,确保引入了所有必要的jar包,这些包通常包括hbase-client、hbase-common、hadoop-client等。这些依赖可以使用Maven或Gradle等构建工具管理,或者直接在...
在Java中,我们可以使用HBase的Java API来与HBase交互,进行数据的读写操作。下面将详细介绍HBase Java API的核心概念和常用方法。 1. **连接HBase** 要连接到HBase,你需要创建一个`Configuration`对象,然后通过...