`

Hbase API操作优化

 
阅读更多

一. 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进行交互的主要接口,通过这个API可以实现对HBase表的创建、删除、增删改查等操作。 1. **HBase架构** - **Region Server**: HBase的数据存储在Region Server上,每个Region Server负责一...

    javaApi_sparkhiveAPI_hbaseAPI.zip

    本压缩包"javaApi_sparkhiveAPI_hbaseAPI.zip"包含了2019年8月至10月期间针对这些技术的Java版API实现,以及与Spark相关的Hive和HBase API。以下是关于这些技术的详细知识: 1. **Java API for Hive**: - **Hive*...

    HbaseTemplate 操作hbase

    总之,Spring Data Hadoop的HbaseTemplate为Java开发者提供了一种简洁且强大的方式来操作HBase,通过其丰富的API可以轻松实现各种HBase操作。在实际项目中,结合Spring的依赖注入和配置管理,能够有效地提升代码的可...

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

    这篇博客“Hbase调用Java API实现批量导入操作”聚焦于如何利用Java编程语言高效地向HBase中批量导入数据。在这个过程中,我们将探讨以下几个关键知识点: 1. **HBase架构**: HBase是基于列族的存储模型,数据被...

    scala API 操作hbase表

    在本文中,我们将深入探讨如何使用Scala API操作HBase数据库。HBase是一个分布式、面向列的NoSQL数据库,它构建于Hadoop之上,提供实时访问大量数据的能力。Scala是一种强大的函数式编程语言,与Java虚拟机(JVM)...

    HBase中文API

    HBase中文API为开发者提供了在中文环境中操作HBase的便利。 1. **入门** - **介绍**: HBase为大数据处理提供了实时读写能力,特别适合于存储海量稀疏数据。 - **快速开始**: 开发者通常需要了解如何创建表、插入...

    hbase 0.9 api

    "Hbase 0.9 API"指的是HBase在0.94.5版本中的客户端API,这个版本是HBase发展历史上的一个重要里程碑,为开发者提供了丰富的功能来操作HBase数据库。 首先,HBase的API主要分为两种:Java API和Shell命令。Java API...

    Hadoop+HBase+Java API

    **Java API** 是Java编程语言提供的应用程序接口,允许开发者使用Java来访问和操作Hadoop和HBase的功能。对于Hadoop,Java API主要包括`org.apache.hadoop.mapreduce`包下的类,如Job、Mapper、Reducer等,用于实现...

    Hbase 0.94 api

    - **行键操作**:行键是数据的唯一标识,HBase API 提供了插入、获取、更新和删除行键的方法。 - **批处理**:`Put` 和 `Get` 操作可以批量执行,提高效率,适合大数据量处理。 - **扫描器(Scanner)**:用于按...

    如何使用Java API操作Hbase(基于0.96新的api)

    在Java中操作HBase,尤其是基于0.96版本的...以上就是使用Java API操作HBase的基本步骤。理解这些概念和方法对于有效管理和处理HBase中的数据至关重要。实际应用中,还需要考虑性能优化、并发控制以及错误处理等细节。

    HBase最佳实践-读性能优化策略

    HBase的读写操作最终都会映射到HDFS的读写操作上,因此优化HDFS的读写性能对于提升HBase整体性能也是至关重要。这可以通过调整HDFS的数据块大小、增加副本数或者改善HDFS的数据分布来实现。 综上所述,HBase的读...

    hbase java api 访问 查询、分页

    在HBase这个分布式列式数据库中,Java API是开发者常用的一种接口来操作HBase,包括创建表、插入数据、查询数据以及实现分页等操作。本文将深入探讨如何使用HBase Java API进行数据访问和分页查询。 首先,我们要...

    java api 访问hbase demo(Maven)

    这个Java API访问HBase的Maven项目可能还包含了对HBase其他特性的演示,如扫描(Scan)、过滤器(Filter)、批量操作(Bulk Load)等。通过`Scan`可以实现数据的批量读取,`Filter`可以定制化查询条件,`Bulk Load`...

    hbase的操作数据demo

    HBase还支持批量操作,例如使用`Mutation`类的Java API,可以一次性提交多个`put`和`delete`操作,提高写入效率。此外,HBase提供了丰富的管理功能,如创建、修改和删除表,以及表分区(Region Splitting)和负载...

    Hbase的安装过程及基本操作

    在实际应用中,还需要根据具体需求进一步配置Hbase,如设置Zookeeper地址、优化性能参数等。同时,理解Hbase的核心概念,如Region、RegionServer、WAL和HFile,对于高效使用Hbase至关重要。在实践中不断学习和探索,...

    Hbase的JavaAPI

    在Java环境中,HBase提供了丰富的Java API供开发者进行数据操作,包括创建表、删除表、更新表以及查询表等基本功能。下面我们将深入探讨HBase的Java API及其在实际应用中的使用。 1. **HBase连接** 在Java中使用...

    hbase的java客户端api操作示例代码.zip

    HBase是一款分布式、高性能、基于列族的NoSQL数据库,主要设计用于...以上就是针对“hbase的java客户端api操作示例代码”的主要知识点。通过这些示例,开发者可以更好地理解和实践如何在Java环境中与HBase进行交互。

    Hbase实验报告.pdf

    HBase查询优化 在实际应用中,由于HBase的分布式特性,查询性能依赖于良好的Row Key设计。合理规划Row Key,可以提高数据访问速度和空间效率。此外,可以使用Scan操作进行范围查询,或通过Filter进行更复杂的过滤...

    hbase api demo

    在这个“hbase api demo”中,我们将深入探讨如何使用HBase的API进行基本的数据操作,包括创建表、插入数据以及通过关键字检索和特定查询条件获取数据。 首先,让我们了解HBase的基本概念。在HBase中,数据被组织成...

    java操作Hbase之从Hbase中读取数据写入hdfs中源码

    在Java中操作HBase,我们需要使用HBase的Java客户端API。首先,确保引入了所有必要的jar包,这些包通常包括hbase-client、hbase-common、hadoop-client等。这些依赖可以使用Maven或Gradle等构建工具管理,或者直接在...

Global site tag (gtag.js) - Google Analytics