最主要的是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 ->(重新分配) region
  • hbase.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缓存时,才发送到服务端,默认是true
  • Scan 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