HDFS全量块汇报(FBR)的限流机制

本文探讨了HDFS全量块汇报(FBR)可能导致的性能问题,尤其是NameNode处理大量块报告时的压力。HDFS通过HDFS-5153优化将大FBR拆分为多个小RPC,但并未解决根本问题。随后,社区引入BR Lease机制,通过NameNode控制DataNode的FBR行为,实现限流。BlockReportLeaseManager负责BR Lease的分配和验证,限制FBR上报数并设定过期时间。未来可能的优化方向是让NN控制FBR的分段和调度。
摘要由CSDN通过智能技术生成

前言


众所周知在HDFS中,DataNode会进行定期的全量块汇报操作到NameNode中,来向NameNode表明其上所存储的所有块数据。这个动作在HDFS中称之为Full Block Report,简称FBR。FBR其实是一个十分expensive的操作,尤其当DataNode存储有大量block块的时候。又因为HDFS FSN全局单一锁的设计,当NameNode同时需要处理来自其下多个DataNode的FBR的时候,就可能陷入overload的情况。进而表现在用户应用层面,就是用户请求响应延时等等。本文笔者来聊聊HDFS的全量块汇报问题,以及目前社区对此的优化方案。

HDFS全量块汇报(FBR)的性能问题


如上文所提到的,由于HDFS内部的全局单一锁的设计,当NameNode对系统元数据做修改操作时,其它所有别的操作都将被block住。因此假设每个DN的FBR都包含有大量块信息的时候,NameNode将会花费很大的开销来处理这些汇报的块。

Hadoop社区在很早的时候就发现了这个问题,它提出的一个改进思路是:既然一整个大的FBR行为会造成很大的性能问题,那么我们是否可以将它拆分成多个小部分的块,并且分多次RPC进行发送呢?基于这个思路,社区在HDFS-5153: Datanode should send block reports for each storage in a separate message.实现了基于每个Storage的块汇报实现。在此优化下,当DataNode发现自身全量块汇报的总数大于阈值块汇报数(默认为100w)时,会将块按照每个Storage存储目录进行汇报,这样一个大的FBR RPC就变为了多次小的RPC行为。这样的话,远端NameNode处理DataNode的FBR压力会小许多。,相关逻辑代码如下:

      // 当全量块汇报数小于阈值块时,进行一次性汇报行为
      if (totalBlockCount < dnConf.blockReportSplitThreshold) {
   
        // Below split threshold, send all reports in a single message.
        DatanodeCommand cmd = bpNamenode.blockReport(
            bpRegistration, bpos.getBlockPoolId(), reports,
              new BlockReportContext(1, 0, reportId, fullBrLeaseId, true));
        blockReportSizes.add(
            calculateBlockReportPBSize(useBlocksBuffer, reports));
        numRPCs = 1;
        numReportsSent = reports.length;
        if (cmd != null) {
   
          cmds.add(cmd);
        }
      } else {
   
        // 否则按照Storage,进行多次RPC汇报
        // Send one block report per message.
        for (int r = 0; r < reports.length; r++) {
   
          StorageBlockReport singleReport[] = {
    reports[r] };
          DatanodeCommand cmd = bpNamenode
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值