HBase性能调优

翻译 2015年11月19日 21:59:42

欢迎转载,请注明:http://blog.csdn.net/oozie123

1 操作系统

1.1 内存

内存,内存,内存,别让HBase挨饿。

1.2 64-bit

用64位平台(和64位的JVM)。

1.3 交换区

小心交换区,设置swappiness为0。

2 网络

避免由于网络原因降低Hadoop和HBase集群性能,最重要的是考虑我们使用的交换硬件,当集群规模增大到2~3倍时,可能造成严重问题。
该着重考虑的因素如下:

  • 设备的转换能力
  • 系统连接数量
  • 上行带宽容量

2.1 单交换机

单交换机在配置汇总最重要的是硬件的交换能力是否能够处理所有系统的连接。某些底价位的硬件拥有比较慢的交换能力而不能充分利用。

2.2 多交换机

在体系结构中,多交换机有潜在的危险。通常拥有1Gb上行带宽的低价交换机从一个切换至另一个时,这点经常成为一个集群通信的瓶颈。特别是运行MapReduce 作业时,通过上行通信,大量的读写数据,很容易达到饱和。
缓解这个问题相当的简单,可以用以下几种方式完成:

  • 尝试运用合适的硬件应对相应集群规模
  • 运用拥有更大端口的单交换机,例如48端口而不是2 * 24端口
  • 增加交叉开关的带宽

2.3 多机架

多机架配置携带潜在的问题,由于多交换机,从两个方面有损性能:

  • 比较差的交换能力
  • 上行传递数据到另一个机架,性能不足

2.4 网络接口

是否所有网络接口都是正常?

2.5 网络一致性和分区容忍

HBase支持网络一致性和分区容忍,参见:http://codahale.com/you-cant-sacrifice-partition-tolerance/

3 Java

3.1 垃圾回收器和HBase

3.1.1 长GC停顿

在他的演讲Avoiding Full GCs with MemStore-Local Allocation Buffers,Todd Lipcon 描述了在HBase中两种常见的stop-the-world垃圾回收,特别是在装载,CMS失败模式和老年代堆碎片引起。
描述第一个问题,通过添加-XX:CMSInitiatingOccupancyFraction和设置它比默认值小,就可以早于默认值启动CMS了。开始于60%或者70%(阀值你调得越低,更多的GC需要回收,更多的CPU需要使用)。为了描述第二种碎片问题,Todd添加了一个实验性的配置,(MSLAB),在HBase 0.90.x必须显示的指示为true(Apache 0.92.x HBase已经默认配置为true)。在你的集群配置中设置hbase.hregion.memstore.mslab.enabled为true,从幻灯片中显示可以看出,在碎片时,最近的JVMs运行良好,所以确保运行该项配置在你的集群中。意识到当它们enabled时,每一个MemStore实例都会占据一个MemStore实例的内存,如果有成千上万的regions或者很多regions拥有相当多的列簇。MSLAB需分配的内存将占据你集群内存很大一部分,极端地可能造成内存溢出。在这种情形下,可以每个RS的regions数或者降低它使用的内存。
如果你在一个热点写的情形,检查 HBASE-8163 MemStoreChunkPool: An improvement for JAVA GC when using MSLAB。它描述了在写很繁重时,降低年轻代GC使用量。如果你没有安装HBASE-8163,你可以尝试提升年轻代GC的次数。可以在hbase-env.sh中,将-XX:PretenureSizeThreshold值调到比hbase.hregion.memstore.mslab.chunksize小,以至于MSLAB的分配发生在老年代空间而不是在年轻代空间。你这样做是由于MSLAB的分配更像总是在老年代,而不是花费代价在之后的s0,s1 eden空间,节省了大量YGC移动和直接在老年代空间分配。
参看更多有关GC日志,参照 JVM Garbage Collection Logs
考虑启用 off-heap Block Cache,会有效的减少GC次数,参见 Block Cache

4 HBase配置

请参考推荐配置

4.1 管理合并

对于大型系统,有必要考虑compactionssplits

4.2 hbase.regionserver.handler.count

请参考hbase.regionserver.handler.count

4.3 hfile.block.cache.size

请参考hfile.block.cache.size,为每个RegionServer进程设置内存。

4.4 Blockcache预取选项

HBASE-9857添加了一个新的选项去预取HFile的内容,当CF或者RS设置了该选项,并且开启了BlockCache。这个选项在HBase 0.98.3和之后的版本才能使用,它的目的在于当缓存开启后,尽可能快地读取缓存,运用in-memory表数据,不计算缓存丢失率。这个非常有利于快速的读取,然而如果预加载数据没有进入BlockCache,不是个好主意。当所有数据都在BlockCache时,则会很好地优化IO。
在列族上使能欲取选线,你可以运用HBase shell或者API。
Enable Prefetch Using HBase Shell

hbase> create 'MyTable', { NAME => 'myCF', PREFETCH_BLOCKS_ON_OPEN => 'true' }

Enable Prefetch Using the API

// ...
HTableDescriptor tableDesc = new HTableDescriptor("myTable");
HColumnDescriptor cfDesc = new HColumnDescriptor("myCF");
cfDesc.setPrefetchBlocksOnOpen(true);
tableDesc.addFamily(cfDesc);
// ...

4.5 hbase.regionserver.global.memstore.size

参考hbase.regionserver.global.memstore.size,这个内存被调整依赖于RS进程的需要。

4.6 hbase.regionserver.global.memstore.size.lower.limit

参考hbase.regionserver.global.memstore.size.lower.limit,这个内存被调整依赖于RS进程的需要。

4.7 hbase.hstore.blockingStoreFiles

参考hbase.hstore.blockingStoreFiles,如果在RS logs阻塞了,则最好增加它的值。

4.8 hbase.hregion.memstore.block.multiplier

参考hbase.hregion.memstore.block.multiplier,如果内存充足,调大此参数。

4.9 hbase.regionserver.checksum.verify

HBase读写数据时,会验证校验和,参考hbase.regionserver.checksum.verify

4.10 优化callQueue 选项

HBASE-11355 介绍了几个callQueue调优机制,可以增加性能。参考Tuning callQueue Options

相关文章推荐

HBase性能调优

  • 2011年12月09日 14:02
  • 24KB
  • 下载

hbase性能调优

  • 2014年09月21日 22:22
  • 37KB
  • 下载

HBase性能调优(1.2官方文档)

HBase性能调优 一. 操作系统: 1.内存: 内存尽可能的大,不要饿着HBase。 2.64-bit 使用64位的操作系统。 3.Swapping 当心交换。swappiness设置...
  • GK_kk
  • GK_kk
  • 2017年06月29日 11:42
  • 469

HBase写入性能改造(续)--MemStore、flush、compact参数调优及压缩卡的使用

首先续上篇测试: 经过上一篇文章中对代码及参数的修改,HBase的写入性能在不开Hlog的情况下从3~4万提高到了11万左右。 本篇主要介绍参数调整的方法,在HDFS上加上压缩卡,最后能达...

HBase 性能调优

因官方Book Performance Tuning部分章节没有按配置项进行索引,不能达到快速查阅的效果。所以我以配置项驱动,重新整理了原文,并补充一些自己的理解,如有错误,欢迎指正。 配置优化 ...

hbase性能调优

转自:http://rdc.taobao.com/team/jm/archives/975 淘宝JAVA中间件团队博客 配置优化 zookeeper.session.timeout 默认值:3...

大数据性能调优之HBase的RowKey设计

大数据性能调优之HBase的RowKey设计 1 概述 HBase是一个分布式的、面向列的数据库,它和一般关系型数据库的最大区别是:HBase很适合于存储非结构化的数据,还有就是它基于列的而不...

Hbase总结(十)Hhase性能调优

因官方Book Performance Tuning部分章节没有按配置项进行索引,不能达到快速查阅的效果。所以我以配置项驱动,重新整理了原文,并补充一些自己的理解,如有错误,欢迎指正。 ...

HBase配置性能调优

配置优化 zookeeper.session.timeout 默认值:3分钟(180000ms) 说明:RegionServer与Zookeeper间的连接超时时间。当超时时间到后,Reig...

关于近期HBase系统设计开发和性能调优的一些小结

1. 全局查询策略 应该一边倒地依赖索引进行查询,保证绝大多数的查询是秒级返回。尽量避免动用全表扫描,让全表扫描仅服务于非常有限的“生僻”查询!实现这种格局需要尽可能地保证索引轻量短小(尽量缩短字节)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HBase性能调优
举报原因:
原因补充:

(最多只允许输入30个字)