HBase性能调优

1. HBase性能调整

在本章中,将讨论优化HBase环境的一些最佳方法。 将了解Java garbage collection tuning,HBase中的压缩和HBase的配置。 此外,将对HBase性能调整应用负载测试。 由于HBase是Hadoop架构和分布式数据库的关键部分,因此希望尽可能优化HBase性能。 

2.垃圾收集调整 (Java garbage collection tuning)

垃圾收集参数是需要为RegionServer进程调整的设置之一。 Master Server不是问题,因为数据不会通过Master Server并且Master也不处理任何比较重的负载请求。 但是,对HBase Region Servers,需要为HBase性能调优添加垃圾收集参数。

3. Memstore-Local Allocation Buffer

为了缓解由于HBase Region Server的Memstore实例导致的内存堆碎片问题,HBase版本0.90引入了一种高级机制,即Memstore-Local Allocation Buffers(MSLAB)。基本上,这些MSLAB是固定大小的缓冲区,由不同大小的KeyValue对象组成。 如果缓冲区大小不能适合新添加的KeyValue对象,则再次为给定的固定大小的对象创建一个新的缓冲区。

4. HBase压缩

HBase支持许多压缩算法,可以在列族级别启用HBase压缩算法。

压缩可以产生更好的性能,因为存在执行压缩和解压缩的CPU的开销,该开销小于从磁盘读取数据的开销。

可用的HBase编解码器(HBase Codecs)

HBase中有支持的压缩算法列表,可以从中进行选择。 这些算法在压缩比,CPU和安装方面具有不同的要求和特性,根据选用适合的算法。

验证安装

一旦安装了支持的HBase压缩算法,建议检查安装是否成功。 可以用Hbase 自带的压缩测试工具来检验。 要使用该工具,请运行以下命令:

./bin/ hbase org.apache.hadoop.hbase.util.CompressionTest

该命令返回有关运行该工具的信息:

1.$ ./bin/hbase org.apache.hadoop.hbase.util.CompressionTest
2.Usage: CompressionTest <path> none|gz|lzo|snappy

例如:

1.hbase class org.apache.hadoop.hbase.util.CompressionTest file:///tmp/testfile gz

启用压缩

启用压缩必须安装相应的JNI和本机压缩库;

1.hbase(main):001:0> create 'testtable', { NAME => 'colfam1', COMPRESSION => 'GZ' }
2.0 row(s) in 1.1920 seconds
3.hbase(main):012:0> describe 'testtable'
4.DESCRIPTION ENABLED
5.{NAME => 'testtable', FAMILIES => [{NAME => 'colfam1', true
6.BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', VERSIONS
7.=> '3', COMPRESSION => 'GZ', TTL => '2147483647', BLOCKSIZE
8.=> '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}]}
9.1 row(s) in 0.0400 seconds

在这里,可以看到压缩设置为GZIP。 此外,对现有表使用alter命令来启用或更改或禁用压缩算法。

5. 负载均衡 (Balancer)

Balancer 是 Master Server中的一个内置功能。 Balancer默认情况下每五分钟运行一次,通过hbase.balancer.period属性,可以配置该属性。

Balancer一旦启动,它就会努力使每个RegionServer分配的Region数量相等,Balancer首先确定分配计划,因此,决定了哪些Region应该将被移动到那个RegionServer进行管理。此外,Balancer还有一个上限时间,该时间决定了Balancer允许运行的时间,通过使用hbase.balancer.max.balancing属性来设置。

6.合并区域 (Merge Region)

有时可能需要合并Region,当将数据添加到相应的表时,Region随着时间的推移而进行自动分割很常见。 如下例子,如想要在删除大量数据后减少每个Region Server的Region数量,HBase中有一个工具允许合并两个相邻的Region, 如下所示:

1.$ ./bin/hbase org.apache.hadoop.hbase.util.Merge
2.Usage: bin/hbase merge <table-name> <region-1> <region-2>

7. Client API:最佳实践

可以考虑进行一些代码优化,以便在使用API从客户端读取或写入数据时获得最佳性能。

8. Disable auto-flush

通过使用setAutoFlush(false)方法,在执行大量put操作时将HTable的自动刷新功能设置为false。

9. Limit scan scope

当使用scan来处理大量行时,可以选择并设置过滤条件。

10.Close ResultScanners

可以避免性能问题。

11. Block cache usage

通过setCacheBlocks()方法,可以将Scan实例设置为使用RegionServer中的块缓存。

12. Optimal loading of row keys

Puts操作时,关闭WAL

13. HBase配置

HBase中有许多配置属性,如减少ZooKeeper timeout, 增加handler,增加堆内存,启用数据压缩,增加region 大小,调整块缓存大小,调整memstore限制等,具体所来,可参见如下配置:

1542203102355320.png

14. 在HBase性能调整中加载测试

建议在安装集群后运行HBase性能测试以验证集群的功能。 此外,它提供了一个基准,可以参考该基准来更改集群的配置。

Hbase Performance Evaluation

为了执行性能评估,HBase附带了自己的工具。 这就是我们所说的Performance Evaluation(PE)。 在没有命令行参数的情况下使用它时,可以获得该命令的主要用法细节:

1.$./bin/hbase org.apache.hadoop.hbase.PerformanceEvaluation
2.Usage: java org.apache.hadoop.hbase.PerformanceEvaluation \
3.[--miniCluster] [--nomapred] [--rows=ROWS] <command> <nclients>

HBase性能调优

发表评论

邮箱地址不会被公开。 必填项已用*标注

× 六 = 四十 八

滚动到顶部