主要是从 HBase 应用程序设计与开发的角度,总结几种常用的性能优化方法。
Auto Flash
通过调用 HTable.setAutoFlushTo(false)方法可以将 HTable 写客户端自动 flush 关闭,
这样可以批量写入数据到 HBase,而不是有一条 put 就执行一次更新,只有当 put 填满客户
端写缓存的时候,才会向 HBase 服务端发起写请求。默认情况下 auto flush 是开启的。
Write Buffer
通过调用 HTable.setWriteBufferSize(writeBufferSize)方法可以设置 HTable 客户
端的写 buffer 大小,如果新设置的 buffer 小于当前写 buffer 中的数据时,buffer 将会被 flush
到服务端。其中,writeBufferSize 的单位是 byte 字节数,可以根基实际写入数据量的多少
来设置该值。
WAL Flag
在 HBase 中,客户端向集群中的 RegionServer 提交数据时(Put/Delete 操作),首先会写
到 WAL(Write Ahead Log)日志,即 HLog,一个 RegionServer 上的所有 Region 共享一个
HLog,只有当 WAL 日志写成功后,再接着写 MemStore,然后客户端被通知提交数据成功,
如果写 WAL 日志失败,客户端被告知提交失败,这样做的好处是可以做到 RegionServer 宕
机后的数据恢复。
对于不太重要的数据,可以在 Put/Delete 操作时,通过调用 Put.setWriteToWAL(false)
或 Delete.setWriteToWAL(false)函数,放弃写 WAL 日志,以提高数据写入的性能。
注:如果关闭 WAL 日志,一旦 RegionServer 宕机,Put/Delete 的数据将会无法根据 WAL
日志进行恢复。
Compression 压缩
数据量大,边压边写也会提升性能的,毕竟 IO 是大数据的最严重的瓶颈,哪怕使用了 SSD
也是一样。众多的压缩方式中,推荐使用 SNAPPY。从压缩率和压缩速度来看,性价比最高。
[Java] 纯文本查看 复制代码
?
HColumnDescriptor hcd = new HColumnDescriptor(familyName);
hcd.setCompressionType(Algorithm.SNAPPY);
批量写
通过调用 HTable.put(Put)方法可以将一个指定的 row key 记录写入 HBase,同样 HBase
提供了另一个方法:通过调用 HTable.put(List<Put>)方法可以将指定的 row key 列表,