最主要的是IO的操作(重点)
不要在一张表里定义太多的Column Family
- Hbase目前不能良好的处理超过包含2-3个CF的表。
- 因为某个CF在flush发生时,它邻近的CF也会因关联效应被触发flush,最终导致系统产生更多IO
配置优化
zookeeper.session.timeout
1.默认的是3分钟
2.RegionServer与Zookeeper间的连接超时时间。当超时时间到后,ReigonServer会被Zookeeper从RS集群清单中移除,HMaster收到移除通知后,会对这台server负责的regions重新balance,让其他存活的RegionServer接管.
3.regionserver ->(连接超时) zookeeper ->(传递给) hmaster ->(重新分配) regionhbase.hregion.max.filesize
1.默认是256M
2.在当前ReigonServer上单个Reigon的最大存储空间,单个Region超过该值时,这个Region会被自动split成更小的region压缩
1.当对压缩速度由较高的要求的时候,我们用LZO
2.当对压缩率有要求时(对存储空间)我们用GZIP(默认的)批量导入
1.在批量导入数据到Hbase前,你可以通过预先创建regions,来平衡数据的负载(负载均衡)autoflush
1.将HTABLE的setAutoFlush设置为false,可以支持客户端批量更新.即当Put填满客户端flush缓存时,才发送到服务端,默认是trueScan Caching
1.scanner一次缓存多少数据来scan(从服务端一次抓多少数据回来scan)。
默认值是 1,一次只取一行。Scan Attribute Selection
1.scan时建议指定需要的Column Family,减少通信量,否则scan操作默认会返回整个row的所有数据(所有Coulmn Family)。Close ResultScanners
1.通过scan取完数据后,记得要关闭ResultScanner,否则RegionServer可能会出现问题(对应的Server资源无法释放)Optimal Loading of Row Keys
1.当你scan一张表的时候,返回结果只需要row key(不需要CF, qualifier,values,timestaps)时,你可以在scan实例中添加一个filterList,并设置 MUST_PASS_ALL操作,filterList中add?FirstKeyOnlyFilter或KeyOnlyFilter。这样可以减少网络通信量。Turn off WAL on Puts
1.当Put某些非重要数据时,你可以设置writeToWAL(false),来进一步提高写性能。writeToWAL(false)会在Put时放弃写WAL log。风险是,当RegionServer宕机时,可能你刚才Put的那些数据会丢失,且无法恢复hbase对于内存有特别的嗜好,在硬件允许的情况下配足够多的内存给它。
通过修改hbase-env.sh中的
export HBASE_HEAPSIZE=3000 #这里默认为1000m