Debian环境下优化HBase存储性能
一 操作系统与存储层优化
sudo sysctl -w vm.swappiness=0;必要时设置vm.overcommit_memory=1。ulimit -n 65536、ulimit -u 65536,并在/etc/security/limits.conf持久化。sudo blockdev --setra 32768 /dev/sdX(按设备调整)。dfs.replication(读多写少可适当提高,写多读少可适当降低),并优化DataNode并发传输与超时:dfs.datanode.max.transfer.threads=4096(或更高)、dfs.image.transfer.timeout=120000(按网络质量调整)。二 HBase表与数据模型优化
create 't', 'cf', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}SPLITS_FILE => 'splits.txt' 或传入byte[][] split keys。setMaxVersions(1)),对过期数据设置TTL(setTimeToLive(seconds))降低存储与Compaction压力。三 存储层关键配置与压缩
BLOCKSIZE(默认64KB),随机读多可调大,顺序扫描多可调小;为随机读开启Bloom Filter减少不必要的磁盘查找。hbase.hregion.memstore.flush.size=134217728(128MB)hbase.regionserver.global.memstore.size=0.4(堆的40%)hbase.regionserver.global.memstore.lower.limit=0.35hbase.hregion.memstore.block.multiplier=4(应对写入突发)hbase.hstore.compaction.ratio=1.2、hbase.hstore.compaction.min=3、hbase.hstore.compaction.max=10四 读写路径与客户端优化
setAutoFlush(false);设置写缓冲:setWriteBufferSize(10MB)(一般不超过10MB)。hbase.hregion.memstore.mslab.enabled=true。hbase.client.scanner.caching=500~1000(默认1),并在Scan时仅指定需要的列族/列。close() ResultScanner释放服务端资源。hbase.regionserver.handler.count=200(按CPU/负载调优)zookeeper.session.timeout=300000(5分钟)。五 监控与容量规划
hbase.hregion.max.filesize)。status 'detailed'、describe 'tbl'、list_regions 'tbl'、compaction_statehadoop-metrics2-hbase.properties输出到文件,定期分析/var/log/hbase/metrics.log与GC日志。hbase.hregion.max.filesize(如4GB)与预分区数量,避免上线初期热点与后期小文件过多。