【精】HDFS DataTransferThrottler限流器机制

169 篇文章 146 订阅 ¥29.90 ¥99.00

为什么会想到写这样一篇文章呢?因为前阵子在做Observer NameNode(我们简称它为ONN)的相关测试,在做ONN的editlog能够快速追上ANN的性能调优的时候,阅读源码时发现在GetJournalEditServlet#doGet方法中,发送editlog文件的时候会传入一个DataTransferThrottler类型的对象,这个throttler的作用是用来限流的,防止传输editlog时将带宽打满导致其他网络传输数据的任务收到影响。同时发现这个DataTransferThrottler类在balancer、传输fsimage的时候也都会用到,还是挺通用的一个数据结构,遂阅读一下源码分析一下限流器的原理。

一、白话说明

这一节用白话说一下限流器的原理。

假设我们在hdfs-site.xml中配置了每秒最大传输带宽为1000B/S,也就是每秒最多传输1000个字节。

那HDFS的限流器里有period窗口的概念,默认值是500ms,它是按500ms进行统计已传输的字节数的。根据上面的配置,HDFS会计算得到500ms内最多传送500个字节。

于是HDFS会在每个period窗口内记录当前窗口剩余可以发送的字节数。比如我们准备发送100个字节,那么当前period窗口剩余允许发送的字节就是500-100 = 400个。当剩余允许发送的字节数小于等于0时,就调用wait方法等待直到下个period周期。

再举一个场景,假设我们发送了1000个字节,那么限流器会限制你,不允许你在接下来的两个period发送数据。

二、源码

ImageServlet#getThrottler方法用来获取一个DataTransferThrottler对象。


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叹了口丶气

觉得有收获就支持一下吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值