1、使用bloomfilter和mapfile_index_interval
Bloomfilter(开启/未开启=1/0) mapfile_index_interval Exists(0-10000)/ms Get(10001 - 20000)/ms
0 128 22460 23715
0 0 11897 11416
0 64 13692 14034
1 128 3275 3686
1 64 2961 3010
1 0 3339 3498
测试环境为:单机,规模为10万条数据。随机在10000条数据中有99条存在的情况下。
结论:开启bloomfilter比没开启要快3、4倍。而适当的减少mapfile_index_interval可以提升性能
注意:在1.9.3版本的hbase中,bloomfilter是不支持的,存在一个bug,可以通过如下的修改加以改正:
(1)、在方法org.apache.hadoop.hbase.regionserver.HStore.createReaders()中,找到如下行
BloomFilterMapFile.Reader reader = file.getReader(fs, false, false);
将其改成
BloomFilterMapFile.Reader reader = file.getReader(fs, this.family.isBloomfilter(), false);
(2)、在方法org.apache.hadoop.hbase.HColumnDescriptor.toString()中,找到如下的代码行
if (key != null && key.toUpperCase().equals(BLOOMFILTER)) {
// Don't emit bloomfilter. Its not working.
continue;
}
将其注释掉
2、hbase对于内存有特别的嗜好,在硬件允许的情况下配足够多的内存给它。
通过修改hbase-env.sh中的
export HBASE_HEAPSIZE=3000 #这里默认为1000m
3、修改java虚拟机属性
(1)、在环境允许的情况下换64位的虚拟机
(2)、替换掉默认的垃圾回收器,因为默认的垃圾回收器在多线程环境下会有更多的wait等待
export HBASE_OPTS="-server -XX:NewSize=6m -XX:MaxNewSize=6m -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode"
4、增大RPC数量
通过修改hbase-site.xml中的
hbase.regionserver.handler.count属性,可以适当的放大。默认值为10有点小
5、做程序开发是注意的地方
(1)、需要判断所求的数据行是否存在时,尽量不要用HTable.exists(final byte [] row) 而用HTable.exists(final byte [] row, final byte[] column)等带列族的方法替代。
(2)、不要使用HTable.get(final byte [] row, final byte [] column) == null来判断所求的数据存在,而是用HTable.exists(final byte [] row, final byte[] column)替代
(3)、HTable.close()方法少用.因为我遇到过一些很令人费解的错误
6、记住 HBase是基于列模式的存储,如果一个列族能搞定就不要把它分开成两个,关系数据库的那套在这里很不实用.分成多个列来存储会浪费更多的空间,除非你认为现在的硬盘和白菜一个价。
7、如果数据量没有达到TB级别或者没有上亿条记录,很难发挥HBase的优势,建议换关系数据库或别的存储技术。
转自:http://www.cnblogs.com/chenjingjing/archive/2010/01/26/1656895.html
分享到:
相关推荐
同时,compaction机制在文件数量超出“hbase.hstore.compactionThreshold”阈值时(默认3)启动,合并多个小文件,减少文件碎片,提升读写性能。 #### 结论与启示 通过对HBase数据插入性能的深度分析与实验验证,...
本文将深入探讨HBase性能优化的各种策略,旨在帮助你提升数据操作的效率。 一、硬件优化 1. **磁盘选择**:HBase对I/O性能要求较高,因此推荐使用SSD硬盘,以减少读写延迟。 2. **内存配置**:合理分配HBase的堆...
以下是对文档中提到的几个重要性能指标的详细解读: 1. **顺序写入(Sequential Write)**: - **FILE: Number of bytes read**:334,692,599 字节被读取,这通常表示测试前的预处理或初始化操作。 - **FILE: ...
"HBase性能测试详细设计文档及用例" 本文档旨在详细介绍HBase性能测试的设计文档和实践经验,涵盖了HBase性能测试需要注意的一些参数设置和测试用例。下面是从该文档中提炼的相关知识点: 1.1 Pre-Creating ...
本文主要介绍HBase性能调优的几种常用方法,重点在于理解性能优化背后的核心概念及其应用。 ### Rowkey设计 Rowkey是HBase中每行数据的唯一标识,它的设计对于性能有着至关重要的影响。一个良好的Rowkey设计应当...
在这个过程中,提升写入性能主要可以从WAL写入机制、批量操作、Region分布、请求均衡性以及KeyValue大小这几个关键点进行考虑。 在WAL写入机制方面,首先要考虑是否需要开启WAL同步写入。通常WAL机制默认是开启的,...
真的是实战经验才能得出来的结果,如果你想深入了解hbase的性能,这个真的对你会有很大的帮助
性能优化是提升HBase集群效率的关键,主要涉及以下几个方面: 1. **硬件优化**:增加内存、使用SSD硬盘、提高网络带宽,这些都可以显著提升HBase的性能。 2. **表设计**:合理设计RowKey,避免热点问题;预分区表...
对于使用固态硬盘(SSD)的情况,WAL写入SSD(HBASE-12848)能进一步提升性能,特别是启用MultiWAL后,性能提升可达40%以上。HBase还支持CF级别的Storage Policy配置,如创建表时指定STORAGE_POLICY为ALL_SSD,或...
"HBase性能优化" HBase是一种高性能的NoSQL数据库,广泛应用于大数据存储和处理领域。然而,HBase的性能优化是非常重要的,特别是在大规模数据集群环境中。以下是HBase性能优化的相关知识点: 启用LZO压缩 HBase...
3. 编写多个HBase程序,在多种条件下测试HBase的性能,这些条件是官方性能评估测试未涉及的。 #### 安装与初步挑战 安装Hadoop的过程相对直接,但在运行内置的性能评估测试时遇到了问题。最初的问题是由于配置错误...
默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都向这一个region写数据,直到这个region足够大了才进行切分。 一种可以加快批量写入速度的方法是通过预先创建一些...
针对HBase的服务端性能调优,可以通过合理调整一系列关键参数来提升系统的稳定性和效率。下面将详细介绍几个核心参数及其调优方法。 ##### 1. `hbase.regionserver.handler.count` - **含义**:该参数决定了...
在IT行业中,尤其是在大数据处理领域,HBase是一个广泛使用的分布式、高性能、列式存储的NoSQL数据库。HBase是建立在Hadoop文件系统(HDFS)之上,为处理大规模数据提供了一个高效的数据存储解决方案。而Spring Data...
- **参数调优**: HBase提供了多个参数用于调整服务器行为以获得更好的性能,例如调整MemStore大小,刷新间隔,以及压缩算法等。 - **预分割表**: 通过预先分割表,减少Region的分裂次数,可以改善写入性能。 - **...
除此之外,还有其他几个关键的HBase性能优化点: 3. 表设计中的Family和Qualifier设置: 有效的表设计是优化性能的关键。应合理规划列族(Family)数量,每个列族内的数据应具有相似的访问模式和生命周期。...
在HBase性能优化的过程中,表设计和...综上所述,HBase的性能优化是一个涉及表设计、RowKey策略、内存管理、读写优化等多个层面的综合过程,需要根据业务特性和硬件资源灵活调整,以实现最佳的数据存储和处理性能。