hbase.hregion.memstore.flush.size(HBase Memstore 刷新大小)

如Region中任意 memstore 大小超过此值(字节数),Memstore 将刷写到磁盘。通过运行由 hbase.server.thread.wakefrequency 指定的频率的线程检查此值。

 

hbase.regionserver.global.memstore.lowerLimit

regionserver所有memstore占整个堆的最大比例,默认35%,当超过这个值时,会选择一些占用内存比较大的memstore阻塞写操作并进行flush,这是为了降低阻塞全部写操作flush带来的问题。

hbase.regionserver.global.memstore.upperLimit

regionserver所有memstore占整个堆的最大比例,默认40%,当超过这个值时,强制阻塞所有的写操作,将所有的memstore刷写到HFile中。

hbase.hregion.memstore.block.multiplier(HBase Memstore 块乘法器)

当region的memstore总量达到 hbase.hregion.memstore.block.multiplier * hbase.hregion.memstore.flush.size 时,会阻塞这个region的写操作,并强制刷写到HFile。触发这个刷新只会发生在memstore即将写满是put了一个巨大的记录的情况,这时会阻塞写操作,强制刷新成功才能继续写入。

hbase.rest.threads.max(HBase REST Server 最大线程)

HBase REST Server 线程池的最大大小。该服务器可以处理此数量的并发请求。将此值设置过高的值会导致OOM。

hbase.thrift.minWorkerThreads(HBase Thrift Server 最少工作者线程)

线程池的“内核大小”。每次连接都创建新线程,直到创建如此多的线程。

hfile.block.cache.size(HFile 块缓存大小)

用于阻止 HFile/StoreFile 使用的缓存所分配的最大堆(-Xmx 设置)的百分比,限制读缓存上限。要禁用,需将此值设置为 0。

也可通过客户端API禁用block cache,get.setCacheBlocks(false)。

hbase.server.thread.wakefrequency(HBase Server 线程唤醒步骤)

搜索工作时暂停的时间段(以毫秒为单位)。服务线程如 META 扫描仪和日志滚轮使用的睡眠间隔。每隔一定时间检查是否需要进行compaction。

hbase.hregion.max.filesize(HBase 文件最大大小)

HStoreFile 最大大小。如果列族的任意一个 HStoreFile 超过此值,则托管 HRegion 将分割成两个。

hbase.hstore.compactionThreshold(HStore 压缩阈值)

如在任意一个 HStore 中有超过此数量的 HStoreFiles,则将运行压缩以将所有 HStoreFiles 文件作为一个 HStoreFile 重新写入。(每次 memstore 刷新写入一个 HStoreFile)您可通过指定更大数量延长压缩,但压缩将运行更长时间。在压缩期间,更新无法刷新到磁盘。长时间压缩需要足够的内存,以在压缩的持续时间内记录所有更新。如太大,压缩期间客户端会超时。

hbase.hstore.blockingStoreFiles(HStore 阻塞存储文件)

如在任意 HStore 中有超过此数量的 HStoreFiles,则会阻止对此 HRegion 的更新,直到完成压缩或直到超过为 'hbase.hstore.blockingWaitTime' 指定的值。

hbase.regionserver.thread.compaction.small(RegionServer 小型压缩线程计数)

完成小型压缩的线程数。regionserver做Minor Compaction时线程池里线程数目。

当Storefile增长较快,而压缩线程数较少,会导致压缩队列增长,甚至超过HBase RegionServer 压缩队列监控的阈值(CDH压缩队列默认监控周期5分钟,监控告警阈值10),从而导致整个RegionServer block;紧接着会导致刷新队列超过HBase RegionServer刷新队列监控的阈值(CDH刷新队列默认监控周期5分钟,监控告警阈值10)。直到什么时候解除block,待完善(是低于阈值,还是等压缩/刷新队列消费完)

HBase Master 的 Java 堆栈大小(字节)

Master 节点 Java 进程堆栈内存的最大大小(以字节为单位)。已传递到 Java -Xmx。

HBase RegionServer 的 Java 堆栈大小(字节)

RegionServer 节点 Java 进程堆栈内存的最大大小(以字节为单位)。已传递到 Java -Xmx。

hbase.regionserver.handler.count(HBase Region Server 处理程序计数)

RegionServer 中启动的 RPC 服务器实例数量。

hbase.regionserver.metahandler.count(HBase Region Server Meta 处理程序计数)

用于处理 RegionServer 中的优先级请求的处理程序的数量。

hbase.wal.regiongrouping.numgroups(每个 RegionServer 的 WAL 管道数量)

将 Multiple HDFS WAL 用作 WALProvider 时,设置每个 RegionServer 应运行的预写日志数量。将生成此数量的 HDFS 管道。给定区域的写入仅进入一个管道,以分散 RegionServer 总负载。

要避免“写阻塞”,只能将flush操作尽量早于达到触发“写操作”的阈值为宜。但是这将导致频繁的flush操作,由此带来的后果便是读性能的下降及额外的负载。频繁的flush会创建大量的HFile,为预防打开过多的HFile及避免读性能恶化,HBase有专门的HFile合并机制(HFile Compaction Process)。HBase会周期性的合并数个小HFile为一个大的HFile。而memstore flush产生的HFile越多,集群系统就要做更多的合并操作(额外负载)。

更糟糕的是:Compaction处理是跟集群上的其他请求并行进行的。当HBase不能够跟上Compaction的时候(阈值配置项),会在RegionServer上出现“写阻塞”。

严重关切RS上Compaction Queue的size,要在其引起问题前,阻止其持续增大。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐