HBase典型配置

来源:互联网 发布:本科 算法工程师 编辑:程序博客网 时间:2024/05/17 08:46
对于region非常多的大规模集群,0.94之前的版本存在以下bug:集群启动时,
master首先启动后,所有的regions都会被assigned给第一个注册启动的regionserver,
这个造成数据严重倾斜,导致严重的性能问题。0.94之后的版本修复了hbase.master.wait.on.regionservers.mintostart,
只有启动的regionserver数量达到配置值时,regionserver才会并行地assign region给regionserver。


zookeeper配置项zookeeper.session.timeout
默认值是3分钟,即regionserver服务器宕机3分钟后,master才会通知服务器宕机。可以把这个配置值调到1分钟或者更低,这会加快master对宕机
的响应速度。但是调小这个参数也会带来其他影响,如果regionserver垃圾回收耗时超过该配置值,那么master会当做这个regionserver节点宕机,
这可能要导致重启该regionserver节点。这也可以解释有时大批量导入数据到HBase时,regionserver宕机的原因。


Hdfs配置项dfs.datanode.failed.volumes.tolerated
一个数据节点允许最大磁盘不可用数量,默认值是1,即一个数据节点上一块磁盘不可用即触发node fault。通常hdfs三副本分别存储在不同节点上,
因此调高该参数一般不会影响hdfs高可用性。
在HBase集群中,遇到如下问题:node fault会触发该节点上的hbase表region迁移,迁移过程中相关region不可用,通常迁移过程较快,一般几分钟

内即可完成,但对于性能要求比较高的业务,分钟级的region不可用也是难以容忍的。针对上述场景,调高该hdfs配置项可解决部分问题。

hbase.regionserver.handler.count
regionserver打开的线程数等待处理来自用户表请求,常规原则是对于数据量较小(MB级别)的请求时,将该值配置较低;反之若请求数据量较小,
则调大该配置,典型场景是用于网站后端服务,这类场景大多数为get请求,put buffered并不常见。
该值配置较大比较危险,当所有put请求的数据总量较大时,会对regionserver内存产生较大压力,甚至触发OOM。regionserver低内存运行会触发
频繁GC,使得GC pause更为显著。(the reason being that all the memory used to keep all the requests' payloads cannot be trashed, no
matter how hard the garbage collector tries).一段时间后,由于regionserver相应每个请求的时间变长,导致集群整体吞吐量变慢。可以通过
查看每个regionserver的rpc.logging尾行,可以协助判断配置值过大或者过小。

WAL大小和数量配置
HLog块大小应该配置为比HDFS略小(比如HDFS块大小64M,则HLog块大小应配置为不超过60M)。HLog数量配置应该依据Memstore配置,以实现容灾需求。
比如RS heap为16G,memstore配置0.4,默认HLog块大小60M,则HLog配置数量为16GB*0.4/60=109,实际情况是memstore不可能完全占满,因此
配置值可以小于109。


Split配置

通常情况下会使用hbase自动split功能,当region大小达到hbase.hregion.max.filesize的配置值大小时,会触发split。从0.90版本以后,增加了可手动触发split的功能。

手动触发split会region创建和移动underload,也使得region的界限清晰,并比较容易实现compaction交错触发以分散io压力。可以通过把hbase.hregion.max.filesize的值配置的很大来禁用自动split,比如配置为100G,但是不建议把它配置成绝对的long型上限值。总体来说,定位问题时可以使用手动触发split功能,通常情况下建议使用自动split。

预分region具体策略取决于你的业务场景,经验值是开始设置每个regionserver节点10个region。最优的region数量取决于最大的那个storefile,设置目标为最大的region仅仅在

major compaction的时候参与compaction,以防止大量的region同时参与compaction。

假如region已经被分为了很多大的region,可以通过调大HConstants.MAJOR_COMPACTION_PERIOD的值来降低major compaction发生的频率。


compaction配置

0.96版本之前,major compaction每天自动执行一次,之后的版本默认每7天执行一次。注意不要禁用major compaction。


推测执行机制

默认情况mapreduce任务的推测执行机制是开启的,通常情况下,建议关闭HBase集群系统级别的推测执行机制,仅对于特别的case可以打开。


balancer

周期性地在hmaster上运行,用于均衡各个regionserver上的负载。通过hbase.balancer.period来配置,默认值是5分钟。


BlockCache

通过hfile.block.cache.size配置BlockCache,不要把该值配置为0,否则regionserver会不断的加载hfile目录,该值最小配置为hfile目录的大小,可以通过hbase原生页面查看到该block size


参考自HBase社区文档

原创粉丝点击