当前位置: 代码网 > it编程>数据库>Mysql > 【HDFS】客户端读某个块时,如何对块的各个副本进行网络距离排序?

【HDFS】客户端读某个块时,如何对块的各个副本进行网络距离排序?

2024年08月01日 Mysql 我要评论
【HDFS】客户端读某个块时,如何对块的各个副本进行网络距离排序?

本文包含如下内容:
① 通过图解+源码分析/a1/b1/node1和 /a1/b2/node2 这两个节点的网络距离怎么算出来的
② 客户端读文件时,副本的优先级。(怎么排序的,排序规则都有哪些?)
③ 我们集群发现的一个问题。

客户端读时,通过调用getblocklocations rpc 获取文件的各个块。
在给客户端返回这些块信息之前,namenode会对每个块的各个副本(例如默认的3副本)按照一定规则排序。

这些规则大概有:
① 把在decommissioned/stale/slow这些状态节点上的副本移到后面;
② 计算客户端与每个副本所在节点的网络距离,把距离小的放在前面;
③ 同时也会考虑 storage type、节点的load(xceiver线程数)等因素。

顺着 clientprotocol#getblocklocations 这个rpc方法往下找,最终找到相关的源码位置,
org.apache.hadoop.hdfs.server.namenode.fsnamesystem#sortlocatedblocks方法:

此方法参数:

  • clientmachine:代表客户端机器的字符串,一般是ip;
  • blocks:客户端要读的文件的块的信息(locatedblocks对象里有locatedblock对象的列表)。
  private 
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com