1. 垃圾回收优化
用户可以通过向hbase-env.sh文件中添加HBASE_OPTS或者HBASE_REGIONSERVER_OPT来设置垃圾回收相关选项,后者仅仅影响region服务器进程,也是推荐的修改方式。
增加新生代大小, 减小新生代垃圾回收次数
-XX:MaxNewSize=8g -XX:NewSize=8g
修改垃圾回收策略
-XX:+UseParNewGC
设置年轻代使用Parallel New Collector策略,这将停止运行Java进程而去清空年轻代堆。与老年代相比年轻代很小,所以这个过程话费时间很短,通常几百毫秒。
-XX:+UseConcMarkSweepGC
以上策略如果用于年老代会造成region server几秒钟甚至数分钟停顿,如果停顿时间超过zookeeper会话超时限制,这个服务器会被master认为已经崩溃,并且随后会被抛弃。
这种情况可以使用并行标记回收策略(Concurrent Mark-Sweep Collector, CMS)来缓解, 不同之处在于其工作时试图在不停止运行Java进程的情况下异步并行的完成工作。这种策略将增加CPU的负担,但是却可以避免重写老生代碎片时的停顿--除非发生提示失败,这种失败会迫使垃圾回收暂停运行Java进程并进行内存整理。
2. 本地memstore分配缓冲区
由于memstore不断创建和释放内存空间, 就会在年老代Heap上产生孔洞。申请新空间时,由于碎片过多导致没有足够大的连续空间分配,JRE会退回到使用(stop the world)垃圾回收器,这样会导致其重写整个堆空间并压缩剩余的可用对象。
MSLAB(memstore-local allocation buffers)是许多固定大小的缓冲区,用来存储大小不同的keyvalue实例。当一个缓冲区不能放下一个新加入的keyvalue时,系统就认为这个缓冲区已经占满了,然后创建一个新的固定大小的缓冲区。 一旦这些缓冲区对象被回收,他们将在堆中留下固定大小的孔洞,之后调用固定大小的新对象将会重新使用这些孔洞,这样就不需要JRE停止压缩回收堆内存了。
但是mslab也有一些副作用,比如更加浪费堆空间;使用缓冲区需要额外的内存复制工作,比直接使用keyvalue实例要稍微慢一点
配置hbase-site.xml中的 hbase.hregion.memstore.mslab.enabled 默认值 true
3 压缩
除非存储已经压缩过的内容如JPEG图像,对于其它场景来说,压缩通常会带来较好的性能,因为CPU压缩和解压的时间比从磁盘读取和写入更多数据消耗的时间更短。
算法 | 压缩比 % | 压缩 MB/S | 解压 MB/S |
GZIP | 13.4 | 21 | 118 |
LZO | 20.5 | 135 | 410 |
Zippy/Snappy | 22.2 | 172 | 409 |
默认Hbase对文件是没有压缩的, 查看 describe 'tablename'
4. 优化拆分和合并
通常Hbase是自动处理Region拆分的,一旦它们到了预定的阈值,region将被拆分成两个,之后它们可以接受新的数据并继续增长。 当用户的region大小已恒定速度增长时,region拆分会在同一时间发生,因为同时需要压缩region中的存储文件,这个过程会重写拆分之后的数据,这将引起IO上升,称之为“拆分和并风暴”。
与其依赖自动拆分,不如关闭这个行为调用split和major_compace命令手动拆分。
为防止自动拆分可设置hbase.hregion.max.filesize的值为一个比较大的值,比如100GB。 然后用客户端实现一个调用split()和 majorCompact()的客户端,也可以使用shell交互的调用相关命令,或者使用cron定时的调用它们。
另一种方法是创建表时进行预拆分
create 't1', 'f1', SPLITS => ['10', '20', '30', '40']
相关推荐
本文将深入探讨HBase性能优化的各种策略,旨在帮助你提升数据操作的效率。 一、硬件优化 1. **磁盘选择**:HBase对I/O性能要求较高,因此推荐使用SSD硬盘,以减少读写延迟。 2. **内存配置**:合理分配HBase的堆...
——HBase性能优化 1、从配置角度优化 1.1 修改Linux配置 Linux系统最大可打开文件数一般默认的参数值是1024,如果你不进行修改并发量上来的时候会出现“Too Many Open Files”的错误,导致整个HBase不可运行,你...
综合来看,HBase性能优化是一个涉及多个层面的复杂过程。它需要开发者对HBase架构和其运行机制有深刻的理解,同时也需要对具体业务场景有充分的认识,才能进行合理的设计和有效的优化。本知识点内容对初学者而言是一...
### HBase性能优化知识点汇总 #### HDFS优化 - **存储机制**: HBase使用HDFS存储WAL(Write-Ahead Log)和HFiles。默认情况下,HDFS不会实时同步数据到磁盘,而是写入临时文件后移动到最终位置,导致在断电情况下...
在HBase性能优化的过程中,表设计和RowKey的设计是至关重要的。预分区是表设计的一个重要环节,目的是避免因表的自动split导致的资源消耗和性能影响。预分区可以根据业务需求预先设定rowkey的范围,比如在例子中,...
在HBase性能优化中,有两个关键的配置参数需要关注:`hbase.hregion.max.filesize`和`autoflush`设置。这些参数对HBase的写入性能、数据一致性和系统稳定性有显著影响。 1. `hbase.hregion.max.filesize`的设定: ...
### Hadoop集群(第12期副刊)-HBase性能优化 #### 一、从配置角度优化HBase性能 **1.1 修改Linux配置** Linux系统默认的最大可打开文件数通常设定为1024个,这对于大多数应用场景来说可能足够,但在高并发环境下...
【大数据与云计算培训学习资料 Hadoop集群 细细品味Hadoop_第12期副刊_HBase性能优化_V1.0 共26页.pdf】 本文档主要关注Hadoop集群中的HBase性能优化,提供了从配置角度进行优化的建议。HBase是一个分布式列式存储...
本篇将详细阐述如何在Hadoop 2.7.1环境下搭建HBase 1.2.1集群,并进行性能优化,以提升系统效率。 首先,我们需要了解Hadoop和HBase的基本概念。Hadoop是基于分布式文件系统HDFS(Hadoop Distributed File System)...
"HBase性能优化" HBase是一种高性能的NoSQL数据库,广泛应用于大数据存储和处理领域。然而,HBase的性能优化是非常重要的,特别是在大规模数据集群环境中。以下是HBase性能优化的相关知识点: 启用LZO压缩 HBase...
│ Hbase性能优化-GC调优 │ Hbase性能优化-内存管理 │ Hbase性能优化-flush、compact、split │ Hbase性能优化-配置snappy压缩 │ Hbase中索引的介绍 │ PHoenix的编译及安装部署 │ PHoenix与Hbase表的关联使用 ...
HBase性能优化案例分析。HDFS设计的初衷是为了存储大文件(例如日志文件),面向批处理、顺序I/O的。然而架设在HDFS之上的HBase设计的初衷却是为了解决海量数据的随机读写的请求。把这两种设计初衷截然相反的组件怎么...
总结来说,HBase写性能优化可以从多个方面入手,包括调整WAL写入机制、使用批量操作、合理分配Region、保证请求均衡以及控制KeyValue大小。每个策略都有其适用的业务场景和优势,系统管理员和开发者应根据实际需求和...
HBase 表设计与性能优化 HBase 是一个分布式的、面向列的 NoSQL 数据库,设计良好的表结构对性能的影响至关重要。本文将从表设计、写表、读表三个方面对 HBase 性能优化进行总结。 表设计 1. 预先创建 Regions ...
然而,在生产环境中,HBase的读写性能优化是一个比较复杂的问题,尤其对于读延迟的优化更是需要精心设计和调优。下面我们将根据标题和描述中提到的关于HBase读性能优化策略进行详细的知识点阐述。 首先,FullGC异常...
### HBase性能深度分析 HBase,作为BigTable的一个开源实现,因其卓越的分布式数据库特性在大数据处理领域占据了重要地位。然而,随着HBase在各行业的广泛应用,用户对其性能表现的关注日益增强,尤其是实时数据...
本文将围绕HBase中的几个关键配置项展开讨论,包括Zookeeper的session超时时间、RegionServer的请求处理线程数、Region的最大文件大小以及内存管理策略,以期提供对HBase性能优化的深入理解。 1. **Zookeeper....