`

Hbase 性能优化

 
阅读更多

 

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']

 

5.负载均衡

master内置了一个叫做均衡器的特性,默认情况下每5分钟(通过hbase.balancer.period设置)运行一次。 一旦均衡器启动,它会尝试均匀分配region到所有region服务器。用户可通过shell的balance_switch命令来更改均衡器的开启或关闭状态。

除了依赖均衡器自动完成工作,用户还可以使用move命令显示地将region移动到另一个region server上。

 

 

6. 合并region

当用户删除大量数据并且想减少每个服务器管理的region数量,可以使用merge_region命令合并相邻的region。

 

 

7 客户端API最佳实践

禁止自动刷新

put.setAutoFlush(false)

 

使用扫描缓存

scan.setCaching(1000);

 

限定扫描范围

尽量只在一个Family中扫描

 

关闭ResultScanner

一定要在try catch 的 finally 中关闭ResultScanner

 

快缓存用法

scan.setCacheBlocks() 对于那些频繁访问的行,建议使用块缓存

 

优化获取行健的方式当用户仅需要获取需要的行健时,在Scan中用setFilter()方法添加一个带MUST_PASS_ALL的FilterList。FilterList中包含FirstKeyFilter和KeyOnlyFilter两个过滤器。使用以上的组合过滤器将会把发现的第一个keyvalue行健返回给客户端。

 

关闭put上的WAL

当需要存入的数据对准确度要求不是很高时,使用Put的writeToWAL(false)来关闭WAL。

分享到:
评论

相关推荐

    HBase性能优化方法总结

    本文将深入探讨HBase性能优化的各种策略,旨在帮助你提升数据操作的效率。 一、硬件优化 1. **磁盘选择**:HBase对I/O性能要求较高,因此推荐使用SSD硬盘,以减少读写延迟。 2. **内存配置**:合理分配HBase的堆...

    Hadoop集群(第12期副刊)_Hbase性能优化

    ——HBase性能优化 1、从配置角度优化 1.1 修改Linux配置 Linux系统最大可打开文件数一般默认的参数值是1024,如果你不进行修改并发量上来的时候会出现“Too Many Open Files”的错误,导致整个HBase不可运行,你...

    hbase性能优化

    综合来看,HBase性能优化是一个涉及多个层面的复杂过程。它需要开发者对HBase架构和其运行机制有深刻的理解,同时也需要对具体业务场景有充分的认识,才能进行合理的设计和有效的优化。本知识点内容对初学者而言是一...

    HBase性能优化指南

    ### HBase性能优化知识点汇总 #### HDFS优化 - **存储机制**: HBase使用HDFS存储WAL(Write-Ahead Log)和HFiles。默认情况下,HDFS不会实时同步数据到磁盘,而是写入临时文件后移动到最终位置,导致在断电情况下...

    Hbase性能优化百科全书(csdn)————程序.pdf

    在HBase性能优化的过程中,表设计和RowKey的设计是至关重要的。预分区是表设计的一个重要环节,目的是避免因表的自动split导致的资源消耗和性能影响。预分区可以根据业务需求预先设定rowkey的范围,比如在例子中,...

    hbase性能优化.pdf

    在HBase性能优化中,有两个关键的配置参数需要关注:`hbase.hregion.max.filesize`和`autoflush`设置。这些参数对HBase的写入性能、数据一致性和系统稳定性有显著影响。 1. `hbase.hregion.max.filesize`的设定: ...

    Hadoop 集群(第 12 期副刊)-HBase性能优化.pdf

    ### Hadoop集群(第12期副刊)-HBase性能优化 #### 一、从配置角度优化HBase性能 **1.1 修改Linux配置** Linux系统默认的最大可打开文件数通常设定为1024个,这对于大多数应用场景来说可能足够,但在高并发环境下...

    大数据与云计算培训学习资料 Hadoop集群 细细品味Hadoop_第12期副刊_HBase性能优化_V1.0 共26页.pdf

    【大数据与云计算培训学习资料 Hadoop集群 细细品味Hadoop_第12期副刊_HBase性能优化_V1.0 共26页.pdf】 本文档主要关注Hadoop集群中的HBase性能优化,提供了从配置角度进行优化的建议。HBase是一个分布式列式存储...

    Hadoop2.7.1+Hbase1.2.1集群环境搭建(7)hbase 性能优化

    本篇将详细阐述如何在Hadoop 2.7.1环境下搭建HBase 1.2.1集群,并进行性能优化,以提升系统效率。 首先,我们需要了解Hadoop和HBase的基本概念。Hadoop是基于分布式文件系统HDFS(Hadoop Distributed File System)...

    HBase的性能优化

    "HBase性能优化" HBase是一种高性能的NoSQL数据库,广泛应用于大数据存储和处理领域。然而,HBase的性能优化是非常重要的,特别是在大规模数据集群环境中。以下是HBase性能优化的相关知识点: 启用LZO压缩 HBase...

    大数据开发之案例实践Hbase的设计及企业优化视频教程(视频+讲义+笔记+配置+代码+练习)

    │ Hbase性能优化-GC调优 │ Hbase性能优化-内存管理 │ Hbase性能优化-flush、compact、split │ Hbase性能优化-配置snappy压缩 │ Hbase中索引的介绍 │ PHoenix的编译及安装部署 │ PHoenix与Hbase表的关联使用 ...

    HBase性能优化案例分析

    HBase性能优化案例分析。HDFS设计的初衷是为了存储大文件(例如日志文件),面向批处理、顺序I/O的。然而架设在HDFS之上的HBase设计的初衷却是为了解决海量数据的随机读写的请求。把这两种设计初衷截然相反的组件怎么...

    HBase写性能优化策略

    总结来说,HBase写性能优化可以从多个方面入手,包括调整WAL写入机制、使用批量操作、合理分配Region、保证请求均衡以及控制KeyValue大小。每个策略都有其适用的业务场景和优势,系统管理员和开发者应根据实际需求和...

    HBase 表设计 写表、读表 性能优化 word文档

    HBase 表设计与性能优化 HBase 是一个分布式的、面向列的 NoSQL 数据库,设计良好的表结构对性能的影响至关重要。本文将从表设计、写表、读表三个方面对 HBase 性能优化进行总结。 表设计 1. 预先创建 Regions ...

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

    然而,在生产环境中,HBase的读写性能优化是一个比较复杂的问题,尤其对于读延迟的优化更是需要精心设计和调优。下面我们将根据标题和描述中提到的关于HBase读性能优化策略进行详细的知识点阐述。 首先,FullGC异常...

    HBase性能深度分析

    ### HBase性能深度分析 HBase,作为BigTable的一个开源实现,因其卓越的分布式数据库特性在大数据处理领域占据了重要地位。然而,随着HBase在各行业的广泛应用,用户对其性能表现的关注日益增强,尤其是实时数据...

    hbase性能调优[借鉴].pdf

    本文将围绕HBase中的几个关键配置项展开讨论,包括Zookeeper的session超时时间、RegionServer的请求处理线程数、Region的最大文件大小以及内存管理策略,以期提供对HBase性能优化的深入理解。 1. **Zookeeper....

Global site tag (gtag.js) - Google Analytics