一、硬件资源分配
vm.swappiness=0
,避免内存溢出时频繁换页影响性能);调整文件系统预读设置(如blockdev --setra 8192 /dev/sda
)以提高磁盘I/O效率。二、HBase核心配置参数调整
hbase-env.sh
,设置HBASE_HEAPSIZE
(如4G
)及-Xmx
/-Xms
(如-Xmx4g -Xms4g
),避免堆内存过大导致GC停顿过长(建议不超过服务器内存的70%)。hbase-site.xml
配置内存比例,hbase.regionserver.global.memstore.size
(默认0.4,建议0.3-0.4,控制MemStore总内存占比)、hbase.regionserver.global.memstore.lower.limit
(默认0.38,MemStore下限,低于此值触发 flush)、hfile.block.cache.size
(默认0.4,控制BlockCache内存占比,用于缓存读取数据,建议与MemStore比例协调,如0.3-0.4)。hbase.regionserver.handler.count
(默认30,建议50-100),增加处理客户端请求的线程数,提升并发处理能力。hbase.client.autoFlush=false
(关闭自动刷新,批量写入)、hbase.client.write.buffer
(如2MB
,增大写入缓冲区大小),减少RPC调用次数;调整hbase.hregion.memstore.flush.size
(默认128MB,建议256-512MB,控制MemStore刷新阈值),避免频繁刷盘。hbase.hregion.compress.algo=snappy
,Snappy平衡压缩率与性能),减少存储空间占用及网络传输开销;配置BlockCache(hfile.block.cache.size
)缓存热点数据,提升读取性能。hbase shell
或Java API预分区(如create 'table_name', 'cf', {NUMREGIONS => 10, SPLITALGO => 'HexStringSplit'}
),将数据均匀分布到多个Region,避免热点问题。三、表设计与数据管理
cf1
、cf2
),列族越多,Flush和Compaction的开销越大。user_id_hash + timestamp
,防止同一用户数据集中在单个Region)。hbase.hcolumn.max.versions
(如3
,保留最近3个版本),减少旧版本数据占用空间;使用hbase.hcolumn.ttl
(如2592000
秒=30天),自动删除过期数据,降低存储成本。四、资源调度与管理
yarn-site.xml
中的yarn.scheduler.maximum-allocation-mb
(YARN最大分配内存)、yarn.nodemanager.resource.memory-mb
(NodeManager可用内存),确保资源均衡分配。RegionNormalizer
),可根据业务需求自定义分配策略(如StochasticLoadBalancer
),将Region均匀分布到集群节点,避免单点过载。五、监控与调优
http://hmaster:16010
)监控集群状态(RegionServer内存、请求延迟、Region数量);集成第三方工具(如Ganglia、Nagios)监控系统资源(CPU、内存、磁盘I/O)。/var/log/hbase/
),分析慢查询、RegionServer异常(如OOM)等问题,及时调整配置。hbase.hstore.compaction.min.size
(控制Minor Compaction频率)、hbase.hstore.compaction.ratio
(合并比例);Major Compaction:建议在业务低峰期手动触发(hbase shell> major_compact 'table_name'
),避免影响线上业务。