美文网首页
HDFS 机架解析的一个优化

HDFS 机架解析的一个优化

作者: xudong1991 | 来源:发表于2021-09-05 11:22 被阅读0次

    现状

    NameNode 通过调用机架解析脚本解析一个 node,并缓存结果。在某些情况下(例如 NN 刚切主之后),NN 的机架解析操作会非常频繁,会持续性地同时拉起几十个机架解析进程,直接打满机器 CPU。此外,由于调用进程开销较大,此时很可能会导致 NN 处理速度突然下降,导致 callQueue 打满,特别是对于那些负载非常高的集群,这种情况更加常见。

    优化策略

    1. NameNode 在启动时首先加载全量机架解析表并缓存(只需加入到已有的 cache map 中即可,不用自己维护新的 cache)。
    2. 对于那些在 NameNode 启动时没有缓存的 IP,继续按照标准的机架解析流程进行解析(解析完成后自动添加到缓存中)。
    3. 机架 cache 的定期更新机制.

    NameNode 新增配置

    1. 指定获取全量机架解析表的脚本
      hdfs-site.xml 中,新增一个配置项(例如 net.topology.get-all-items.script.file.name),取值为获取全量机架解析表的脚本,默认为 null. 对此脚本的要求是:

      1. 脚本需要 chmod 增加 x 权限,否则 NameNode 无法执行此脚本。
      2. 执行该脚本,其输出应为完整的机架解析表。
      3. 解析表内容需要按照下面的格式组织:
        • 每行一个解析项
        • 每个解析项的格式为: 节点IP Rack

      脚本的具体实现方式非常灵活,可以按需编写,根据解析表大小,可以选择逐项 echo 、cat 本地文件、ssh 到某台指定机器上执行某个命令、list PG 数据库、list redis 数据库,等等。

    2. NameNode 机架缓存定期更新间隔
      同样在 hdfs-site.xml 中,新增一个定期更新配置项(例如
      net.topology.refresh.interval.seconds,默认值为3600(即1小时))。 注意:机架缓存的更新方式是执行上面指定的全量加载脚本(因此如果没有指定该脚本,则不更新),而非针对每个 DN IP 单独进行机架解析并更新缓存,原因:频繁拉起机架解析进程会严重占用 NN 机器 CPU.

    机架解析表加载脚本示例

    简单起见,这里选择逐行 echo 解析表

    1. 在 hdfs-site.xml 中,指定获取机架解析表的脚本:
    <property>
        <name>net.topology.get-all-items.script.file.name</name>
        <value>/tmp/getAllRacks.sh</value>
    </property>
    
    1. 脚本具体实现如下:
    echo "192.168.202.11 /rack1"
    echo "192.168.202.12 /rack2"
    echo "192.168.202.13 /rack3"
    
    1. NN 的机架解析表加载日志


    相关文章

      网友评论

          本文标题:HDFS 机架解析的一个优化

          本文链接:https://www.haomeiwen.com/subject/pngxwltx.html