本文主要是介绍提高HBase WAL写入性能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题描述:
HBase在集成其它组件,作为存储引擎完成组合服务时,往往是数据先写入HBase,然后对数据进行检索,之后数据通过网络传输给目标服务。HBase与组件之间的数据一致性使用WAL来保证。WAL是一种常用的保证数据可靠写入的一种技术,全称为Write-Ahead-Log,就是在向客户端返回写成功前,先将写操作在WAL中记录下来。这样即便系统在数据写入的过程中出现宕机等情况,也可以通过WAL来恢复数据。
WAL虽然保证了数据的写入安全,但是同样引入了问题即:系统写入性能,可以看出WAL是系统写入性能的一个瓶颈。如何解决该问题以提高写入性能呢?下面是个人的两个想法,实践证明可明显提高写入性能。
问题分析与解决
我们知道WAL是对HBase的每一次数据变更操作进行记录(只记录变更行的键值),该操作涉及到HDFS的flush操作,HDFS的flush操作会确保数据被写入对应的DataNode中,这个操作需要进行2次网络连接(第一次连接NameNode确定要写入的DataNode队列,第二次连接DataNode发送数据),比较耗时,会严重影响HBase的写入性能。
通过分析HBase的写入过程,可以发现,HBase本身的WAL已经记录了最近写入而没有持久化的数据,只要保证HBase将数据刷入(flush)磁盘时,将HBase与其它组件的WAL写入HDFS,就可以保证HBase与组件之间的一致性。因此,可以考虑异步提交HBase-组件操作,如下所示:
- 后台线程异步定时将WAL从内存刷入到HDFS中 ,防止日志过多;
这篇关于提高HBase WAL写入性能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!