组件运行参数调优
| 服务 | 配置文件 | 参数 | 推荐值 | 默认值(仅参考) | 调优说明 |
|---|---|---|---|---|---|
| HBase | hbase-env | HeapSize | -- | 1024 | 堆内内存,但具体大小应根据硬件配置和工作负载来调整。 |
| HBASE_REGIONSERVER_OFFHEAPSIZE | -- | -1(JVM参数默认值) | 堆外内存 JVM参数-XX:MaxDirectMemorySize的值 若出现java.lang.OutOfMemoryError: Direct buffer memory异常可以上调这个值。 | ||
| hbase-site | hbase.regionserver.handler.count | 256 | 30 | 总的处理线程数,可以根据客户端的请求数进行调整,读写请求较多时,增加此值。 | |
| hbase.ipc.server.callqueue.handler.factor | 0.1 | 0.1 | 请求量大时,减少队列锁竞争。 建议保持默认值。 | ||
| hbase.ipc.server.callqueue.type | fifo | fifo | fifo类型时,可以使用fastpath,请求不进入队列,直接由handler处理。 建议保持默认值。 | ||
| hbase.regionserver.memstore.class | org.apache.hadoop.hbase.regionserver.skiplist.hbase.CCSMapMemStore | org.apache.hadoop.hbase.regionserver.DefaultMemStore | 开启CCSMapMemstore特性 | ||
| hbase.regionserver.global.memstore.size | 0.4 | 0.4 | 在RegionServer中,MemStoreFlusher线程负责执行flush操作。该线程会定期检查写操作内存的使用情况,当写操作占用的内存总量达到设定的阈值时,MemStoreFlusher将启动flush操作。它会按照从大到小的顺序,flush部分相对较大的memstore,直到所占用的内存量低于阈值。 建议保持默认值。 | ||
| hbase.client.ipc.pool.size | 1 | 1 | 客户端和某个RS的socket数量。 建议保持默认值。 | ||
| hbase.hstore.compaction.throughput.lower.bound | 209715200 (200MB) | 52428800(50MB) | compaction速度最高上限设置,主要是方便验证时改表结构做major_compact快一些 | ||
| hbase.hstore.compaction.throughput.higher.bound | 524288000 (500MB) | 104857600(100MB) | |||
| HDFS | hdfs-site | dfs.client.read.shortcircuit | true | false | HDFS的配置,短路读特性开启 |
| dfs.client.read.shortcircuit.streams.cache.size | 256 | 256 | short-circuit最多持有的文件描述符数量。 建议保持默认值。 | ||
| dfs.client.hedged.read.threadpool.size | 0 | 0 | 关掉hedged read,防止重复请求,资源浪费。 建议保持默认值。 |
表属性设置优化
| 设置方法 | 说明 |
|---|---|
alter 'usertable',{NAME=>'0',COMPRESSION => 'SNAPPY'}major_compact 'usertable' |
压缩,取值有NONE/SNAPPY 主要影响读性能,一般取SNAPPY较优 |
alter 'usertable',{NAME=>'0', DATA_BLOCK_ENCODING=>'ROW_INDEX_V1'}major_compact 'usertable' |
编码,取值有FAST_DIFF和ROW_INDEX_V1 主要影响读性能,一般取ROW_INDEX_V1较优 |
alter 'usertable',{NAME=>'0',IN_MEMORY => true, PREFETCH_BLOCKS_ON_OPEN =>true}major_compact 'usertable' |
如果L2缓存足够大,可以缓存下表所有内容,考虑修改表属性,在open的时候就缓存表数据到内存,避免需要提前预热,如需去除相关属性: |
alter 'mock_table_prod',METHOD => 'table_att_unset', NAME => 'PREFETCH_BLOCKS_ON_OPEN' |
|
alter 'usertable',{NAME=>'0', BLOCKSIZE => 16384}major_compact 'usertable' |
BLOCKSIZE默认值是64K,该参数一般值较小适用于get查询,较大适用于scan查询。 get场景可以设置为16K(16384),观察是否比默认值有增加 |