Hbase WAL

大数据 专栏收录该内容
64 篇文章 0 订阅

问题:现在测试平台hbase升级到hbase 1.3,在测试过程中,发现吞吐上不去,也有时延较大的情况。hbase很多参数是已经调优过的,所以问题应该不是这块。

1.监控region server日志,发现以下日志非常非常频繁

2019-05-09 09:51:20,283 INFO org.apache.hadoop.hbase.regionserver.wal.FSHLog: Slow sync cost: 386 ms, current pipeline: [DatanodeInfoWithStorage[*****IP*****:50010,DS-c48aa3a4-a1fe-42da-afde-8e9b073fdbde,DISK], DatanodeInfoWithStorage[*****IP*****:50010,DS-931988dd-8452-416c-8980-1d165fa4a3cb,DISK], DatanodeInfoWithStorage[*****IP*****:50010,DS-96ac32c3-9596-410a-a73c-bc6456766bc2,DISK]]

怀疑是WAL这边限制了写入速率。

2.我们来看看hbase 官方文档WAL部分有以下描述

基本可以确定是因为WAL着里成为了写入的瓶颈。

了解到的一些解决方法:

1.参考apache hbase官方文档配置hbase.wal.provider项

2.看到有博客指出hbase.hlog.asyncer.number可以增加hlog同步到磁盘的线程个数(https://blog.csdn.net/ukakasu/article/details/80020161

3.可以设置异步写hlog

4.不建议但你非要这么做也可以的方式,可以关掉WAL.

我在测试过程总将上述1和2都进行了调整。测试情况来看吞吐量还是有所提升的。

 

WAL(Write-Ahead-Log)预写日志

WAL是HBase的RegionServer在处理数据插入和删除的过程中用来记录操作内容的一种日志。WAL被同一个region服务器的所有region共享。在每次Put、Delete等一条记录时,首先将其数据写入到RegionServer对应的HLog文件,当WAL写成功以后,才算提交数据成功,接着写入memstore,如果写入WAL失败,则修改数据的整个操作将失败。

注意,WAL是要写hdfs的!这样才能保证持久化。因为写入memstore的数据在内存中,一down就没。这时要靠WAL来恢复数据。

所以这就存在一个hdfs里面的同步问题。

默认是每次写Log日志都需要往集群里的其他机器同步一次,同步的开销是比较大的,但不及时同步又可能因为机器宕而丢日志。同步的操作现在是通过Pipeline的方式来实现的,Pipeline是指datanode接收数据后,再传给另外一台datanode,是一种串行的方式。(so写入压力大时会受到限制)

附:


 

 

 

  • 1
    点赞
  • 0
    评论
  • 6
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:撸撸猫 设计师:马嘣嘣 返回首页

打赏作者

看穿数据之美

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值