HBASE优化

硬件和操作系统调优

1)配置内存
HBase对于内存的消耗是非常大的,主要是其LSM树状结构、缓存机制和日志记录机制决定的,所以物理内存当然是越大越好,并且现在内存的价格已经降到可以批量配置的程度,例如一条三星DDR3、DDR4的16GB内存,价格大约在1000元左右。在互联网领域,服务器内存方面的主流配置已经是64GB,所以一定要根据实际的需求和预算配备服务器内存。如果资源很紧张,推荐内存最小在32GB,如果再小会严重影响HBase集群性能。
2)配置CPU
HBase给使用者的印象可能更偏向于“内存型”NoSQL数据库,从而忽略了CPU方面的需求,其实HBase在某些应
用上对CPU的消耗非常大,例如频繁使用过滤器,因为在过滤器中包含很多匹配、搜索和过滤的操作;多条件组合扫描的场景也是CPU密集型的;压缩操作很频繁等。如果服务器CPU不够强悍,会导致整个集群的负载非常高,很多线程都在阻塞状态(非网络阻塞和死锁的情况)。
一般CPU的品牌有Intel、AMD、IBM,Intel是主流。
现在的服务器支持1、2、3、4、6、8、10路CPU,而每路CPU的核心有双核、四核、六核、八核、十二核。CPU数量和核心数之间可以互相搭配,当然值越大相应的价格越高。建议每台物理节点至少使用双路四核CPU(2×4),主流是2~8路,一般单颗CPU至少四核。一颗四核心CPU,便宜的,价格在1500元左右,还是可以接受的。所以,对于CPU密集型的集群,当然是越多越好。
3)磁盘的配置
如果是机械盘,主要看转速,一般的是7000转。可以考虑用SSD固态硬盘,底层是通过电阻器原件构架的,速度接近于内存。
4)垃圾回收器(GC)的选择
对于运行HBase相关进程JVM的垃圾回收器,不仅仅关注吞吐量,还关注停顿时间,而且两者之间停顿时间更为重要,因为HBase设计的初衷就是解决大规模数据集下实时访问的问题。那么排首位的应该是停顿时间短,从这个方面CMS和G1有着非常大的优势。
而CMS作为JDK1.5就已经出现的垃圾收集器,已经成熟应用在互联网等各个行业。所以,选用CMS作为老年代的垃圾回收器。与CMS搭配的新生代收集器有Serial和ParNew,而对比这两个收集器,明显ParNew具有更好的性能,所以新生代选用ParNew作为垃圾收集器。那么,最终选用的垃圾收集器搭配组合是CMS+ParNew。而且很多成熟应用已经验证了这种组合搭配的优势。
与CMS收集器相关的几个重要参数的具体含义、默认值和相关说明详见下表:
在这里插入图片描述
置方式:在hbase-env.sh文件中添加如下参数
export HBASE_OPTS="-XX:+UseConcMarkSweepGC" -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSCompactAtFullCollection
5)JVM堆大小设置
堆内存大小参数也在hbase-env.sh文件中设置,设置的参数如下:
export HBASE_HEAPSIZE=16384
在上面代码中指定堆内存大小是16284,单位是MB,即16GB。当然,这个值需要根据节点实际的物理内存来决
定。一般不要超过实际物理内存的一半(1/2)。

  • 服务器内存的分配,比如服务器内存64GB,为操作系统预留出8G-16GB。此外给Yarn留出8G~16GB,如果没有其他框架,把剩余的留给HBase。

Hbase调优

1)调节数据块(data block)的大小
HFile数据块大小可以在列族层次设置。这个数据块不同于之前谈到的HDFS数据块,其默认值是65536字节,或
64KB。数据块索引存储每个HFile数据块的起始键。数据块大小的设置影响数据块索引的大小。数据块越小,索引越大,从而占用更大内存空间。同时加载进内存的数据块越小,随机查找性能更好。但是,如果需要更好的序列扫描性能,那么一次能够加载更多HFile数据进入内存更为合理,这意味着应该将数据块设置为更大的值。相应地,索引变小,将在随机读性能上付出更多的代价。可以在表实例化时设置数据块大小,代码如下:
hbase(main):002:0> create ‘mytable’,{NAME => ‘colfam1’, BLOCKSIZE => ‘65536’}如果mytable表在实际业务中,随机查找业务多,就调小。如果范围查询(顺序扫描)业务多,就调大。
2)适当时机关闭数据块缓存
把数据放进读缓存,并不是一定能够提升性能。如果一个表或表的列族只被顺序化扫描访问或很少被访问,
则Get或Scan操作花费时间长一点是可以接受的。在这种情况下,可以选择关闭列族的缓存。关闭缓存的原因在于:如果只是执行很多顺序化扫描,会多次使用缓存,并且可能会滥用缓存,从而把应该放进缓存获得性能提升的数据给排挤出去。所以如果关闭缓存,不仅可以避免上述情况发生,而且可以让出更多缓存给其他表和同一表的其他列族使用,数据块缓存默认是打开的。
可以在新建表或更改表时关闭

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值